一、请求的处理过程
服务器收到客户端发送过来的请求时,需要找到处理该请求的视图函数,这个过程Flask是通过在URL映射中查找到请求的URL。URL映射就是视图函数和URL之间的对应关系。映射关系的生成,是通过app.route()修饰器或者非修饰器app.add_url_rule()生成。
查看程序的映射:
[root@test-service01 test]# python
Python 2.7.6 (default, Jan 6 2016, 15:23:55)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from hello import app
>>> app.url_map
Map([<Rule '/chengxu' (HEAD, OPTIONS, GET) -> chengxu>,
<Rule '/' (HEAD, OPTIONS, GET) -> index>,
<Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>,
<Rule '/user/<username>' (HEAD, OPTIONS, GET) -> user>,
<Rule '/int/<id>' (HEAD, OPTIONS, GET) -> int>])
>>>
以上就是程序的URL映射。
二、请求钩子
如果在程序执行之前或者是之后进行一些处理,可以通过注册将函数用户满足功能。请求钩子是使用修饰器实现的。
flask支持的4种请求钩子。
before_first_request 注册一个函数,在程序处理第一个请求之前运行
before_request 在每次的请求之前执行
after_request 如果没有未处理的异常抛出,在每次的请求之后执行
teardown_request 无论有无未处理的异常抛出,在每次的请求之后都执行
如果要在请求钩子函数和视图函数之间共享数据,可以通过程序上下文全局变量g
from flask import Flask
from flask import request
from flask import app
from flask import current_app
from flask import g
app = Flask(__name__)
@app.before_first_request
def bf_first_request():
g.string = 'before_first_request'
@app.route('/test')
def test():
return '<h1>%s </h1>' % g.string
程序上下文g和请求钩子的配合使用