常用钩子函数

在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)

flask-钩子函数&g对象的更多相关文章

  1. Flask初学者:g对象,hook钩子函数

    Flask的g对象 作用:g可以可以看作是单词global的缩写,使用“from flask import g”导入,g对象的作用是保存一些在一次请求中多个地方的都需要用到的数据,这些数据可能在用到的 ...

  2. Flask10 登录模块、表单框架、表单渲染、表单验证、bookie、请求之前钩子、g对象、编写装饰器

    from flask import Flask from flask import request from flask import render_template from flask_wtf i ...

  3. 21、Flask实战第21天:常用的Flask钩子函数

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

  4. Flask 偏函数、g对象、flask-session、数据库连接池、信号、自制命令、flask-admin

    目录 一.偏函数 二.g对象 g对象和session的区别 三.flask-session 四.数据库连接池 pymsql链接数据库 数据库连接池版 utils/sql.py 五.信号 六.命令fla ...

  5. 11.Flask钩子函数

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

  6. flask 钩子函数

    说明: before_request函数,就是一个装饰器,他可以把需要设置为钩子函数的代码放到视图函数执行之前执行 示例: from flask import Flask,url_for,redire ...

  7. 七十二:flask钩子函数之关于errorhandler的钩子函数

    errorhandler:在发生一些异常的时候,如404.500,如果要自定义处理这些错误,就可以使用errorhandler来处理,使用errorhandler需要注意几点: 1.在errorhan ...

  8. 七十:flask钩子函数之关于before_request的钩子函数

    在flask中钩子函数是使用特定的装饰器装饰的函数,用于在正常执行的代码中,插入一段自己想要执行的代码(hook) before_first_request:flask项目第一次部署后指向的钩子函数, ...

  9. 七十一:flask钩子函数之关于context_processor的钩子函数

    context_processor:使用这个钩子函数,必须返回一个字典,这个字典的值在所有模板中都可以使用,这个钩子函数作用是,如果一些在很多模板中都要用到的变量,那么就可以使用此钩子函数来返回,而不 ...

随机推荐

  1. OOP的五大原则

    一:单一职责原则. 含义一方面是避免相同的职责分散到不同的类中:另一方面避免一个类承担太多职责. 二:接口隔离原则. 一个类对另一个类的依赖性应当建立在最小的接口上的. 就是定制化服务设计的原则. 三 ...

  2. Java Enum 枚举类的values方法

    Enum类和enum关键字定义的类型都有values方法,但是点进去会发现找不到这个方法.这是因为java编译器在编译这个类(enum关键字定义的类默认继承java.lang.Enum)的时候 自动插 ...

  3. OneHot编码

    One-Hot编码 What.Why And When? 一句话概括:one hot编码是将类别变量转换为机器学习算法易于利用的一种形式的过程. 目录: 前言: 通过例子可能更容易理解这个概念. 假设 ...

  4. DDB---查询与优化

    摘要:分布式数据库(Distributed DB)是数据库中非常重要的一个部分,随着要处理的数据越来越多,分布式逐渐成为了一种策略.主要有:分布式操作系统,分布式程序设计语言,分布式文件系统,分布式数 ...

  5. js获取地址栏上参数的值

    function GetQuerystring(name){ var reg=new RegExp("(^|&)" + name +"=([^&]*)(& ...

  6. freemarker使用

    获得FreeMarker 官网:http://freemarker.org/ 中文帮助文档:https://sourceforge.net/projects/freemarker/files/chin ...

  7. ROS零门槛学渣教程系列前言

    为什么选择ROS: 1.ROS是开放源码的,在该平台上可以找到非常很多免费开源的代码包,并且这些例程还带wiki说明文档: 2.机器人领域最新的算法直接支持ROS,简单几个步骤就能运行: 3.ROS工 ...

  8. 十一、eclipse如何创建一个maven工程project

    1. 2. 3. 4. 这是刚创建的工程,因为缺少WEB-INF/web.xml,所以项目会报错 5. 6. 再编写一个web.xml文件,项目就正常了,没有报错:后期需要自己添加对应的pom.xml ...

  9. exl表格找两个字符间的数据

    例子找的是]XXX,中间的内容 =MID(B2,FIND("]",B2)+1,FIND(",",B2)-FIND("]",B2)-1)   ...

  10. Vue.$nextTick

    `Vue.nextTick(callback)`,当数据发生变化,更新后执行回调. `Vue.$nextTick(callback)`,当dom发生变化,更新后执行的回调