Flask——请求响应循环

xiaoxiao2021-02-28  117

避免大量重复参数的访问导致视图函数代码重复、乱的问题, Flask使用上下文是一些变量再一个线程中全局可访问,不会干扰其他线程。

1.程序上下文、请求上下文

变量名上下文说明curr_app程序上下文当前激活程序的程序实例g程序上下文处理请求时用于临时存储的对象,每次请求会重设grequest请求上下文请求对象,封装了HTTP请求的内容session请求上下文用户会话,存储请求之间需要记住的值的词典

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'

2.请求调度

app.url_map可查看URL映射

3.请求钩子

避免代码的重复,可以使用请求钩子

before_first_request:第一个请求前运行before_request:每一次请求前运行after_request:没有未处理的异常抛出时,在每次请求之后运行teardown_request:即使有异常,每次请求后运行

请求钩子函数与视图函数之间一般用g变量共享数据,例如,验证登录用户后把用户保存在g.user中,视图函数在通过g变量获取user信息

4.响应

@app.route('/') def index(): return '<h1>Bad Request</h1>', 400

视图函数return的值就是响应,另外还可以添加一个状态码返回,不设置默认为200,还可以有第三个参数,(header)组成的字典,一般可以忽略

from flask import make_response @app.route('/') def index(): response=make_response('Good') response.set_cookie('huu','666') return response

make_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(404return 'hello,%s!'%user.name

abort可以生成一种特殊的响应用于处理错误,abort不会吧控制权交还给调用它的视图函数,而是抛出异常把控制权交给Web服务器

转载请注明原文地址: https://www.6miu.com/read-58458.html

最新回复(0)