zoukankan      html  css  js  c++  java
  • 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:不管是否有异常,注册的函数都会在每次请求之后执行。

    @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对象,是线程隔离的。该对象的作用是绑定数据,绑定的数据可以在全局使用!

    @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)
  • 相关阅读:
    android 蓝牙串口通讯使用简介
    【C】C语言可变参va_start/va_arg/va_end使用说明
    【Codecs】CABAC深入分析与理解
    【Bugs】VS单步调试的无法进入断点、行号错乱等问题解决方法
    【SVAC1】NAL单元的封装
    【CV】傅里叶描绘子原理及应用简介
    【CV】骨架提取
    【SVAC】千目聚云:SVAC2.0已来 未来发展道路一片光明
    【Debug】当前不会命中断点,源代码与原始版本不同
    【Base】POE供电
  • 原文地址:https://www.cnblogs.com/yxi-liu/p/8581136.html
Copyright © 2011-2022 走看看