app = Flask(__name__)
Flask的构造函数只有一个必须制定的参数,即程序主模块或包的名字。
Flask 用这个参数决定程序的根目录,以便能够找到相对于程序根目录的资源文件位置
render_template函数第一个参数是模板文件名,随后的都是关键字参数
@app.route('/user/')
def user(name):
return render_template('user.html', name=name)
flask支持在路由中使用int,float和path类型,默认是字符串
@app.route('/user/')
def get_user(id):
abort(404)
return "no, %d" % id
Jinja2使能识别所有类型的变量,包括列表、字典和对象
<p>{{mydict['dict]}}p>
<p>{{mylist[3]}}p>
<p>{{mylist[myintvar]}}p>
<p>{{myobj.somemethod()}}p>
一个简单的Flask程序
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello
'
if __name__ == '__main__':
app.run(debug=True)
在模板中使用条件控制语句
{% if user %}
Hello, {{user}}
{% else %}
Hello,Stranger!
{% endif %}
在模板中渲染一组元素
<ul>
{% for comment in comments %}
<li>{{comment}}li>
{% endfor %}
ul>
Flask使用上下文临时把某些对象变为全局可访问。使用上下文让变量在一个线程中全局可访问,与此同时不会干扰其他线程。
Flask中有两种上下文,程序上下文和请求上下文
变量名 | 上下文 | 说明 |
---|---|---|
current_app | 程序上下文 | 当前激活程序的实例 |
g | 程序上下文 | 处理请求时用作临时存储的对象,每次请求都会重设这个变量 |
request | 请求上下文 | 请求对象,封装了客户端发出的HTTP请求中的内容 |
session | 请求上下文 | 用户会话,用于存储请求之间需要记住的值得词典 |
有时在处理请求之前或之后执行代码,可以使用钩子。Flask支持四种钩子
before_first_request 注册一个函数,在处理第一个请求之前运行
before_request 注册一个函数,在每次请求之前运行
after_request 注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行
teardown_request 注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行
例如,before_request处理程序可以从数据库中加载已登录的用户,并将其保存到g.user中,随后调用视图函数时,视图函数再使用g.user获取用户。
from flask import make_response
def index():
response = make_response('content')
response.set_cookie('answer','42')
return response
from flask import redirect
@app.route('/')
def index():
return redirect('http://www.baidu.com')
from flask import abort
@app.route('/')
def get_user(id):
abort(404)
注意:abort不会把控制权交还给调用它的函数,而是抛出异常把控制权交给Web服务器。
使用Flask-script支持命令行选项
Flask-script是一个Flask扩展,为Flask程序添加了一个命令行解析器。pip3 install flask-script
使用Flask-script
# from flask.ext.script import Manager
from flask_script import Manager
app = Flask(__name__)
manager = Manager(app)
if __name__ == '__main__':
manager.run()
这样,可以通过 python hello.py runserver
以调试模式启动web服务器,查看更多选项可以使用python hello.py runserver --help
本文参考《Flask Web开发-基于Python的Web应用开发实战》