zoukankan      html  css  js  c++  java
  • Flask学习笔记(10):钩子函数

    常用的钩子函数:
    在Flask中钩子函数是使用特定的装饰器装饰的函数。为什么叫做钩子函数呢,是因为钩子函数可以在正常执行的代码中,插入一段自己想要执行的代码。那么这种函数就叫做钩子函数。(hook)
    1. before_first_request:Flask项目第一次部署后会执行的钩子函数。
    2. before_request:请求已经到达了Flask,但是还没有进入到具体的视图函数之前调用。一般这个就是在视图函数之前,我们可以把一些后面需要用到的数据先处理好,方便视图函数使用。
    3. context_processor:使用这个钩子函数,必须返回一个字典。这个字典中的值在所有模版中都可以使用。这个钩子函数的函数是,如果一些在很多模版中都要用到的变量,那么就可以使用这个钩子函数来返回,而不用在每个视图函数中的render_template中去写,这样可以让代码更加简洁和好维护。
    4. errorhandler:在发生一些异常的时候,比如404错误,比如500错误。那么如果想要优雅的处理这些错误,就可以使用errorhandler来出来。需要注意几点:

    • 在errorhandler装饰的钩子函数下,记得要返回相应的状态码。
    • 在errorhandler装饰的钩子函数中,必须要写一个参数,来接收错误的信息,如果没有参数,就会直接报错。
    • 使用`flask.abort`可以手动的抛出相应的错误,比如开发者在发现参数不正确的时候可以自己手动的抛出一个400错误。

    示例代码:

     1 from flask import Flask,render_template,abort
     2 
     3 app = Flask(__name__)
     4 
     5 @app.route('/')
     6 def hello_world():
     7     # abort(404) # 指定任意的返回状态
     8     return render_template("index.html")
     9 @app.route("/list")
    10 def my_list():
    11     return render_template("list.html")
    12 
    13 @app.before_first_request
    14 def before_first_request():
    15     print("第一次请求之前的操作xxx")
    16 
    17 @app.before_request
    18 def before_request():
    19     print("在每一次请求之前的操作xxx")
    20 # 如在每一次请求之前将session绑定到g对象上
    21 
    22 # 上下文处理器
    23 @app.context_processor
    24 def content_processor():
    25     return {"current_username":"wangyi"}
    26 # 函数名随意,用处举例:网站每个页面都有个个人中心,上面显示着当前的用户名
    27 # 最后要返回一个字典,即使是空字典
    28 # 在html里直接使用变量即可:{{ current_username }}
    29 
    30 @app.errorhandler(404)
    31 def page_not_found(error):
    32     return "您访问的页面不存在!"
    33 # 错误处理,例如404错误,正常情况下会返回错误提示信息NOT Found,不够
    34 # 友好,所以用这个错误处理钩子函数,展示自定义的错误信息 ,但是这时候状态码就是200 OK了,记得同时返回原状态码404
    35 
    36 
    37 if __name__ == '__main__':
    38     app.run()
  • 相关阅读:
    现在,为什么连一个 JavaScript 的厌恶者都认为:每个开发人员都应该学习 JavaScript
    .NET 部署_ASP.NET 部署的八大关键实践
    Ext.Net 1.2.0_Ext.Net.DateColumn 日期格式问题
    Ext.Net 1.2.0_Ext.UX.GMapPanel Google Map 插件
    Yahoo Web UIs——Java开发者丰富的Web UI
    单元测试_使用 Nmock 单元测试 .NET 业务对象
    公共语言运行库中的程序集05程序集安全注意事项
    Entity Framework_成功针对多种数据库使用实体框架(EF)
    反射_01概述和反射中的运行时类型以及查看类型信息
    公共语言运行库中的程序集01概述
  • 原文地址:https://www.cnblogs.com/wangyi0419/p/12816857.html
Copyright © 2011-2022 走看看