flask-钩子函数&g对象

经常使用钩子函数

在Flask中钩子函数是使用特定的装饰器装饰的函数。钩子函数能够在正常执行的代码中,插入一段本身想要执行的代码。那么这种函数就叫作钩子函数。(hook)数据库

 

 

  • before_first_request:顾名思义,注册一个在处理第一个请求以前运行的函数
@app.before_first_request   # 第一次访问的时候调用
def first_request(): 
    print('first time request')

 

  • before_request:注册一个在处理请求以前运行的函数。
@app.before_request   # 每次接受到请求的时候都会执行
def before_request():   
    if not hasattr(g,'user'):
        setattr(g,'user','xxxx')

 

  • teardown_appcontext:无论是否有异常,注册的函数都会在每次请求以后执行。flask

@app.teardown_appcontext
def teardown(exc=None):
    if exc is None:
        db.session.commit()
    else:
        db.session.rollback()
        db.session.remove()

 

  • template_filter:在使用Jinja2模板的时候自定义过滤器。好比能够增长一个upper的过滤器
@app.template_filter
def upper_filter(s):
    return s.upper()

 

 

  • `context_processor`:必须返回一个字典。这个字典中的值在全部模版中均可以使用。这个钩子函数的函数是,若是一些在不少模版中都要用到的变量,那么就可使用这个钩子函数来返回,而不用在每一个视图函数中的`render_template`中去写,这样可让代码更加简洁和好维护。
@app.context_processor
def my_context_processor():
    return {'current_user':'xxx'}

 

  •  `errorhandler`:在发生一些异常的时候,好比404错误,好比500错误。可使用`errorhandler`来出来。须要注意几点:
        * 在errorhandler装饰的钩子函数下,记得要返回相应的状态码。
        * 在errorhandler装饰的钩子函数中,必需要写一个参数,来接收错误的信息,若是没有参数,就会直接报错。
        * 使用`flask.abort`能够手动的抛出相应的错误,好比开发者在发现参数不正确的时候能够本身手动的抛出一个400错误。
@app.errorhandler(404)
def page_not_found(error):
    return 'This page does not exist',404
from flask import abort
def my_list():
# 若是user_id在数据库中不存在,这时候我就让他跳转到400错误
     abort(400)   # 抛出400错误
视图

 

 

g对象

  g绑定到了Local对象,是线程隔离的。该对象的做用是绑定数据,绑定的数据能够在全局使用!session

@app.route('/')
def index():
    username = request.args.get('username')
g.username
= username # 绑定
log_a()
log_b()
log_c(

 

from flask import g

def log_a():
    print('log a %s' % g.username)

def log_b():
    print('log b %s' % g.username)

def log_c():
    print('log c %s' % g.username)
相关文章
相关标签/搜索