美文网首页
Python Flask常用的钩子函数

Python Flask常用的钩子函数

作者: 小混混_f0f2 | 来源:发表于2018-05-03 17:35 被阅读0次
    1. 钩子函数
      钩子函数是指在执行函数和目标函数之间挂载的函数, 框架开发者给调用方提供一个point -挂载点, 至于挂载什么函数有我们调用方决定, 这样大大提高了灵活性
    2. 常用的钩子函数
    • before_first_request 处理第一次请求之前执行
    # 服务器被第一次访问执行的钩子函数
    @app.before_first_request
    def first_request():
        print("Hello World")
    
    • before_request 在每次请求之前执行. 通常使用这个钩子函数预处理一些变量, 视图函数可以更好调用
    # 在服务器接收的请求还没分发到视图函数之前执行的钩子函数
    @app.before_request
    def before_request():
        # print("我勾住了每次请求")
        user_id = session.get("user_id")
        if user_id:
            g.user = "DaYe"
    
    • teardown_appcontext 当APP上下文被移除之后执行的函数, 可以进行数据库的提交或者回滚
    @app.teardown_appcontext
    def teardown(exc=None):
        if exc is None:
            db.session.commit()
        else:
            db.session.rollback()
        db.session.remove()
    
    • template_filter, 增加模板过滤器
    @app.template_filter
    def upper_filter(s):
        return s.upper()
    
    • context_processor 上下文处理器, 返回的字典可以在全部模板中使用
    @app.context_processor()
    def context():
        # 必须返回一个字典
        # hasattr(obj, attr) 判断obj是否有attr属性, 注意此时的attr应该是字符串
        if hasattr(g, "user"):
            return {"current_username": "DaYe"}
        else:
            # 注意: 必须返回一个字典
            return {}
    
    • errorhander, 在发生一些异常时, 比如404错误, 就会自动调用对应的钩子函数
    1. 发生请求错误时, 框架会自动调用相对钩子函数, 并向钩子函数传入error参数
    2. 如果钩子函数没有定义error参数, 就会报服务器错误
    3. 开发者可以通过flask.abort方法手动抛出异常, 比如发现输入的参数错误可以使用abort(404)来解决
    @app.errorhander(404)
    def page_not_found(error):
        return render_template("error400.html"), 404
    
    
    @app.errorhander(500)
    def server_error(error):
        return render_template("error505.html"), 500
    
    以下为授权协议. 当你引用本文时, 默认你同意本协议.
    凭此协议, 你可以在不通知作者的情况下, 对本文进行修改,转发或者进行商业行为. 但是你无权修改 ,删除本协议.
    @Auther: DaYe
    @Email: yesongsheng@163.com
    @Time: 5/2/2018 15:25
    感谢你自觉遵守本协议
    

    相关文章

      网友评论

          本文标题:Python Flask常用的钩子函数

          本文链接:https://www.haomeiwen.com/subject/fkdlrftx.html