首页 > 其他 > 详细

Flask钩子函数

时间:2020-01-05 15:26:42      阅读:97      评论:0      收藏:0      [点我收藏+]

常用的钩子函数

  • 在Flask中钩子函数是使用特定的装饰器装饰的函数。 为什么叫做钩子函数呢,是因为钩子函数可以在正常执行的代码中,插入一段自己想要执行的代码。那么这种函数就叫做钩子函数

  • 1.before_first_request : 处理第一次请求之前执行。列如以下代码

    • 在执行视图函数之前执行这个函数 ,只执行一次

    • + @app.before_first_request
      + def first_request():
        + print("first time request")
  • 2.before_requesrt: 在每次请求之前执行。通常可以用这个装饰器来给视图函数增加一些变量。一般这个就是在视图函数之前,我们可以把一些后面需要用到的数据先处理号,方便视图函数使用。列如以下代码

    • 在每次执行视图函数之前都执行这个函数

    • + @app.before_request
      + def before_request():
        + if not hasattr(g,user):   hasattr判断某个对象上面是否有这个属性  判断g对象上是否有user这个属性
          + setattr(g, user,xxx)
  • 3.teardown_appcontext: 不管是否有异常,注册的函数都会在每次请求之后执行

    • + @pp.teardown_appcontext
      + def teardown(exc = None):
        + if exc is None:
          + db.session.commit()
        + else:
          + db.session.rollback()
        + db.session.remove()
  • 4.template_filter: 在使用Jinja2模板的时候自定义过滤器。比如可以增加一个upper的过滤器(当然Jinja2已经存在这个过滤器,本示例只是为了演示作用):

    • + @app.template_filter
      + def upper_filter(s):
        + return s.upper()
  • 5.context_processor: 上下文处理器, 返回的字典中的键可以在模板上下文中使用。列如:

    • 使用这个钩子函数,必须返回一个字典。这个字典中的值在所有模板(html)中都可以使用。这个钩子函数的作用是,如果一些在很多模板中都要用到的变量,那么就可以使用这个钩子函数来返回,而不用在每个视图函数中的‘render_template‘中去写,这样可以让代码更加简洁和好维护

    • @app.context_processor
      return{current_user : xxx}
  • 6.errorhandler: errorhandler接受状态码,可以自定义返回这种状态码的响应的处理方法。列如:

    • 在发生一些异常的时候,比如404错误,比如500错误,那么如果想要优雅的处理这些错误,就可以使用‘errorhandle‘来处理,需要注意几点

      • 在errorhandler装饰的钩子函数下,记得要返回相应的状态码

      • 在errorhandler装饰的钩子函数中,必须要写一个参数,来接受错误的信息,如果没有参数,就会直接报错

      • 使用"flask.abort"可以手动的抛出相应的错误,比如开发者在发现参数不正确的时候可以自己手动的抛出一个400错误 用法: abort(400)

    • 示例代码如下

      • @app.errorhandler(404)
        
        def page_not_found(error):
        
           return "This page does not exist",404

         

         

Flask钩子函数

原文:https://www.cnblogs.com/fengzi759/p/12152535.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!