flask 上下文全局变量

current_app # 当前激活程序的程序实例
g # 处理请求时用作临时存储的对象。每次请求会重设这个变量
request # 请求对象,封装了客户端发出的http请求中的内容
session # 用户会话,用于存储请求之间需要‘记住‘的值的词典

请求钩子

before_first_request:注册一个函数,在处理第一个请求之前运行;
before_request:注册一个函数,在每次请求之前运行;
after_request:注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行;
teardown_request:注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行

在请求钩子函数和视图函数之间共享数据一般使用上下文全局变量g。例如,before_request处理程序可以从数据库中加载已登录用户,并将其保存到g.user中。随后调用视图函数时,视图函数再使用g.user获取用户。

响应

http协议需要的不仅是作为请求响应的字符串。http响应中一个很重要的部分是状态码,falsk默认设为200。
如果视图函数返回的响应需要使用不同的状态码,那么可以把数字代码作为第二个返回值,添加到响应文本之后

@app.route
def index():
    return '

bad request

'
, 400

视图函数返回的响应还可以接受第三个参数,这是一个由header组成的字典,可以添加到http响应中。如果不想返回由1个,2个,3个值组成的元组,Flask视图函数还可以返回Response对象。make_response()函数可以接受1个,2个,3个参数,并返回一个Response对象,有时我们需要在视图函数中进行这种转换,然后在响应对象上调用各种方法,进一步设置响应。

from flask import make_response
@app.route
def index():
    response = make_response('

this is document carries a cookie!

'
) # 设置cookie response.set_cookie('answer', '42') return response

重定向,状态码302,指向的地址由Location首部提供。重定向响应可以使用3个值形式的返回值生成,也可以在Response对象中设定。不过,由于使用频繁,Flask提供redirect()辅助函数,用于生成这种响应

from flask import redirect
@app.route
def index():
    return redirect('http://www.example.com')

还有一种特殊的响应由abort函数生成,用于处理错误

from flask import abort
@app.route('/user/')
def get_user(id):
    user = load_user(id)
    if not user:
        abort(404)
    return '

hello, %s

'
, %user.name # abort 不会把控制权交还给调用他的函数,而是抛出异常把控制权交给web服务器

Flask扩展

pip install flask-script

from flask import Flask
from flask.ext.script import Manager

app = Flask(__name__)
manager = Manager(app)

@app.route('/')
def index():
    return 'aaa'

if __name__ == '__main__':
    manager.run()

# python hello.py runserver

你可能感兴趣的:(flask 上下文全局变量)