避免大量重复参数的访问导致视图函数代码重复、乱的问题, Flask使用上下文是一些变量再一个线程中全局可访问,不会干扰其他线程。
Flask在分发请求之前会激活程序、请求上下文,请求处理完后再删除。上下文被推送后才可以使用变量。 例子,
from hello import app from flask import current_app >>>current_app.name 出现错误 >>>app_ctx=app.app_context() >>>app_ctx.push() >>>current_app.name 'hello'app.url_map可查看URL映射
避免代码的重复,可以使用请求钩子
before_first_request:第一个请求前运行before_request:每一次请求前运行after_request:没有未处理的异常抛出时,在每次请求之后运行teardown_request:即使有异常,每次请求后运行请求钩子函数与视图函数之间一般用g变量共享数据,例如,验证登录用户后把用户保存在g.user中,视图函数在通过g变量获取user信息
视图函数return的值就是响应,另外还可以添加一个状态码返回,不设置默认为200,还可以有第三个参数,(header)组成的字典,一般可以忽略
from flask import make_response @app.route('/') def index(): response=make_response('Good') response.set_cookie('huu','666') return responsemake_responses也可以接受三个参数(视图函数返回值一样),这样可以在响应上调用方法进行进一步的设置。
from flask import redirect @app.route('/') def index(): return redirect('www.baidu.com')方便的重定向的响应
from flask import abort @app.route('/user/<id>') def get_user(id): user=load_user(id) if not user: #如果用户id不存在就返回状态码404 abort(404) return 'hello,%s!'%user.nameabort可以生成一种特殊的响应用于处理错误,abort不会吧控制权交还给调用它的视图函数,而是抛出异常把控制权交给Web服务器