定义全局的钩子函数

有的时候在处理请求之前和之后,执行某些特定的代码是很有用的,这就用到了请求钩子

例如在请求之前创建数据库连接或者redis连接;或者是系统里面用户请求处理之前先验证用户的身份,是否激活,激活执行什么操作,没激活用户一直绑到固定页面去直到激活

为了避免每个试图函数中都使用重复的代码,flask提供了注册通用函数的功能;

也就是说只要写一个请求钩子-函数,整个程序实例全局都被应用了。

例如:在所有请求之前先验证下用户的认证状态

@before_app_request
def before_request():
if current_user.is_authenticated:
current_user.ping()
if not current_user.confirmed and request.endpoint[:5] != 'auth.' and request.endpoint != 'static':
return redirect(url_for('auth.unconfirmed'))

常见的4种钩子:

before_first_request:注册一个函数,在处理第一个请求之前运行

before_request:注册一个函数,每次请求之前运行

after_request:注册一个函数,没有未处理的异常抛出,每次请求之后运行

teardown_request:注册一个函数,有未处理的异常抛出,每次请求之后运行

在请求钩子和视图函数之间共享数据一般使用程序上下文g;

例如before_request处理程序可以从数据库中加载已登录用户,将其保存到g.user中,随后调用试图函数,试图函数再从g.user中获取用户

flask_context的更多相关文章

随机推荐

  1. 动态inventory脚本的python实现

    #!/usr/bin/env python # -*- coding: utf-8 -*- ''' 基于python的动态inventory脚本实例 ''' import os import sys ...

  2. python 实用pickle序列化

    存储数据结构到一个文件中称为序列化.相json这样的格式需要定制的序列化数据的转换器.python提供了pickle模块以特殊的二进制格式保存和恢复数据对象. 还记得json解析datetime对象时 ...

  3. codeforces B. George and Round 解题报告

    题目链接:http://codeforces.com/contest/387/problem/B 题目意思:给出1-n个问题,以及要满足是good rounde条件下这n个问题分别需要达到的compl ...

  4. 20171202作业1python入门

    1.简述编译型与解释型语言的区别,且分别列出你知道的哪些语言属于编译型,哪些属于解释型 编译型:需要编译器,执行前一次性翻译成机器能读懂的代码(如c,c++,执行速度快,调试麻烦) 解释型:需要解释器 ...

  5. C++中map容器的说明和使用技巧

    C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值. 一.map的说明 1 头文件 #include <map> 2 定义 ma ...

  6. tflearn数据预处理

    #I just added a function for custom data preprocessing, you can use it as: minmax_scaler = sklearn.p ...

  7. 并不对劲的bzoj5322:loj2543:p4561:[JXOI2018]排序问题

    题目大意 \(T\)(\(T\leq10^5\))组询问 每次给出\(n,m,l,r\),和\(n\)个数\(a_1,a_2,...,a_n\),要找出\(m\)个可重复的在区间\([l,r]\)的数 ...

  8. linux文件查找(find,locate)

    文件查找: locate:       非实时,模糊匹配,查找是根据全系统文件数据库进行的: # updatedb, 手动生成文件数据库 速度快   find:       实时       精确   ...

  9. P2759 奇怪的函数

    题目描述 使得 x^x 达到或超过 n 位数字的最小正整数 x 是多少? 输入输出格式 输入格式: 一个正整数 n 输出格式: 使得 x^x 达到 n 位数字的最小正整数 x 输入输出样例 输入样例# ...

  10. SNE降维与可视化

    from sklearn import datasets digits = datasets.load_digits(n_class=5) X = digits.data y = digits.tar ...