概述
Flask 是 Python 中轻量级易拓展的框架。依赖两个外部库:Werkzeug(WSGI 工具集)、Jinja2(模板引擎)。Werkzeug 可理解为一个路由模块,用于处理请求,匹配视图函数,响应请求;而 Jinja2 相当于将响应结果渲染至模板文件。
应用
from
Flask 框架中,路由模块根据请求的 URL 在路由表中寻找对应的 URL 规则,并返回视图函数的执行结果给 WSGI 服务器。Flask 内部使用两张表维护路由:url_map(维护 URL 规则和 endpoint)、view_functions(维护 endpoint 和视图函数的映射),其中 endpoint 默认为函数名。
蓝图
蓝图可理解为是一个存储一组视图方法的容器对象,用来将一个大型应用分模块组织管理。应用初始化时需要注册 Blueprint。
from flask import Flask
user_bp = Blueprint('user', __name__)
@user_bp.route('/')
def user_profile():
return 'user_profile'
app.register_blueprint(user_bp) # 应用初始化时注册
钩子
在应用交互中,有些工作需要提前或是之后处理,如建立数据库连接、权限校验、数据格式转换等。Flask 提供了一些请求钩子供使用,另一些初始化工作也可以在 __ init__ 函数中处理。
from flask import Flask
from flask import abort
app = Flask(__name__)
# 在第一次请求之前调用
@app.before_first_request
def before_first_request():
print("before_first_request")
# 在每一次请求时调用,这时候已经有请求了
@app.before_request
def before_request():
print("before_request")
# if 请求不符合条件:
# return "laowang"
# 在执行完视图函数之后会调用
@app.after_request
def after_request(response):
print("after_request")
response.headers["Content-Type"] = "application/json"
return response
# 请每一次请求之后都会调用,会接受一个参数,参数是服务器出现的错误信息
@app.teardown_request
def teardown_request(response):
print("teardown_request")
@app.route('/')
def index():
return 'index'
if __name__ == '__main__':
app.run(debug=True)
响应
接收 POST JSON 并响应 JSON 格式数据。
from flask import, request, json, Response
@app.route('/user', methods=['POST'])
def hello()
result = {'sum': request.json['a'] + request.json['b']}
return Response(json.dumps(result), mimetype='application/json')
参考
http://www.pythondoc.com/flask/