Flask入门笔记
基本介绍
Flask是python的一个轻量级web框架(相对与Django),轻量体现在它很多功能需要安装第三方插件实现,且其项目的目录结构没有严格的要求。最小的一个flask应用仅仅需要六、七行代码即可搭建出一个网站,不用过多的配置,一个python文件就可以实现。
快速入门
安装flask包
1 | pip install flask |
一个最基本的flak应用代码如下:
1 | from flask import Flask |
以上代码运行后即可在http://127.0.0.1:5000/
访问。
基本概念
动态路由
url中包含变量,定义路由时使用<>
1
2
3
4
5
6
7from flask import Flask
app = Flask(__name__)
def user(name):
return '<h1>Hello, %s!</h1>' % name
if __name__ == '__main__':
app.run(debug=True)
全局变量
- current_app:当前程序实例
- g:处理请求时用作临时存储的对象。每次请求都会重设这个变量
- request:请求对象,封装了客户端发出的 HTTP 请求中的内容
- session:户会话,用于存储请求之间需要“记住”的值的词典
响应
重定向:
1
2
3
4from flask import redirect
def index():
return redirect('http://www.example.com')
处理404
1 | from flask import abort |
模版
模版就是定义好静态网页,通过服务器去渲染网页使之成为动态网页。
渲染模版
如有以下程序:1
2
3
4
5
6
7from flask import Flask, render_template
@app.route('/')
def index():
return render_template('index.html')
@app.route('/user/<name>')
def user(name):
return render_template('user.html', name=name)
- 模版的默认目录在
templates
目录下(需自己创建),即index.html
放在templates
目录下 - 使用
render_template()
方法渲染网页 name
为传递参数,可以是对象、字典等- 在模版文件中使用
取传递的值
控制结构
模版文件(html)中使用控制结构如下:
if1
2
3
4
5{% if user %}
Hello, {{ user }}!
{% else %}
Hello, Stranger!
{% endif %}
for1
2
3
4<ul>
{% for comment in comments %}
<li>{{ comment }}</li> {% endfor %}
</ul>
模版继承
base.html内容:1
2
3
4
5
6
7
8
9<html>
<head>
{% block head %}
<title>{% block title %}{% endblock %} - My Application</title> {% endblock %}
</head>
<body>
{% block body %}
{% endblock %} </body>
</html>
继承base.html1
2
3
4
5
6
7{% extends "base.html" %}
{% block title %}Index{% endblock %} {% block head %}
{{ super() }}
<style>
</style>
{% endblock %}
{% block body %} <h1>Hello, World!</h1> {% endblock %}
也就是使用这种方式继承时,block名称相同的地方的内容会被替换。
自定义错误页
1 | @app.errorhandler(404) |
引用静态文件
如css,js,图片等
⚠️flask默认会在static
找静态文件
如引用图标1
2<link rel="shortcut icon" href="{{ url_for('static', filename = 'favicon.ico') }}"
type="image/x-icon">
url_for()
url_ for(‘index’)得到的结果是/。调用url_for(‘index’, _external=True)返回的则是绝对地 址,在这个示例中是 http://localhost:5000/。
此外,还可以加上参数如:url_ for(‘index’,name=”name”),如果变量为动态参数则会得到/name,否则为/?name=”name”。
Web表单
使用flask_wtf插件
一、定义表单类,继承自FlaskForm
1 | from flask_wtf import FlaskForm |
其中validators
为校验方式,DataRequired()
为不能为空值
二、定义密钥(必须)
字符串随意,key固定1
app.config['SECRET_KEY'] = "sj1jk4d2ndj4452kjjksefop"
三、在模版中使用表单类
1 | <form method="post"> |
其中hidden_tag
必要,用来存密钥
四、处理提交表单
1 | @app.route('/',methods=['GET','POST']) |
此处获取表单提交的值也可用request
对象获取如:request.form.get(‘name’)
闪现消息
- 在逻辑处理中,使用函数
flash("用户名或密码错误")
- 在模版中使用以下代码显示:
1
2
3{% for message in get_flashed_messages() %}
{{ message }}
{% endfor %}
连接数据库
使用flask_sqlalchemy
插件
定义数据模型类
1 | from flask_sqlalchemy import SQLAlchemy |
其中,因为初始化数据库需在应用实例化以后,所以使用db.init_app(app)
这种方式来实例化数据库,使得可以在应用创建后调用函数来实例化数据库。
配置数据库参数
1 | app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db' |
不同数据库仅地址不一样,其它一致
建表
1 | db.create_all() |
插值
1 | u = User() |
查询
查询第一个,返回结果为对象1
u = User.query.filter_by(username=name).first()
如果查询所有为.all()
其它扩展
Flask-Script
使用命令行启动网站,并且可以传入地址,端口等参数,设置如下:1
2
3
4
5from flask_script import Manager
app = Flask(__name__)
manager = Manager(app)
if __name__ == '__main__':
manager.run()
命令行操作:1
python hello.py runserver --host 0.0.0.0
允许所有计算机访问。
Flask-Bootstrap
1 | from flask_bootstrap import Bootstrap |
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com
文章标题:Flask入门笔记
本文作者:子非鱼
发布时间:2019-01-05, 14:42:59
最后更新:2019-01-06, 21:12:30
原始链接:https://Wangsr.cn/2019/01/05/Flask入门笔记/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。