什么是请求勾子?

为了让每个视图函数避免编写重复的功能代码,flask提供了通用设施的功能,就是所谓的勾子

那么请求勾子就是,在浏览器请求服务器资源的前后挂载相关的处理函数

请求勾子有什么作用?

作用:在浏览器请求服务器资源的前后挂载相关的处理函数

比如:1、浏览器请求资源之前,根据需求进行权限校验

   2、请求结束之后,处理数据的交互格式......

如何使用请求勾子?

请求勾子是通过装饰器的形式实现,Flask支持如下四中请求勾子:

  • before_first_request
    在处理第一个请求前执行
  • before_request
    在每次请求前执行
    如果在某修饰的函数中返回了一个相应,视图函数将不再被调用
  • after_request
    如果没有抛出错误,在每次请求后执行
    接收一个参数:视图函数做出的响应,
    在此函数中可以 对响应的值在返回之前做最后的一步修改处理
    需要将参数中的响应在此参数中进行返回
  • teardown_request
    在每次请求后执行
    接收一个参数:错误信息,如果有相关错误抛

总结:请求勾子类似于装饰器,可以在不修改函数内部的逻辑前提下增加逻辑.

from flask import Flask
app = Flask(__name__) class Config(object):
DEBUG = True app.config.from_object(Config) @app.before_first_request
def before_first_request():
"""第一次请求视图函数时才会调用"""
print("before_first_request") @app.before_request
def before_request():
"""每次请求视图函数之前会调用此函数"""
print("before_request") @app.after_request
def after_request(response):
"""在请求之后会调用,并且在函数里会接受一个参数:响应,并且还要将响应返回"""
print("after_request")
print(response)
# response可以得到视图函数返回的相关响应数据:<Response 14 bytes [200 OK]>
# 在此函数中可以对响应的数据做统一的处理
return response @app.teardown_request
def teardown_request(error):
"""在请求之后会执行,如果请求的函数有异常,会把具体的异常传递到此函数"""
print("teardown_request") @app.route('/')
def hello_world():
return 'Hello World!!!' if __name__ == '__main__':
app.run()

Flask基础(09)-->请求勾子函数的更多相关文章

  1. (三)flask中的请求钩子函数

    请求勾子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接: 在请求开始时,根据需求进行权限校验: 在请求结束时,指定数据的交互格式: 为了让每个视图 ...

  2. flask基础之请求钩子(十二)

    前言 什么是请求钩子?在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要统一处理,为了让每个视图函数避免编写重复功能的代码,flask提供了统一的接口可以添加这些处理函数,即请求钩子. 请求钩子 ...

  3. flask 文件下载 文件服务器 请求参数 函数修饰符

    180M电子书 通过已经下载到pc,在上传到私有公网服务器,之后,再异地下载 以下代码,文件内容错乱 [root@bigdata-server- mydataweb]# tree . ├── mydl ...

  4. Flask基础(12)-->请求上下文和应用上下文

    请求上下文和应用上下文 请求上下文:可以简单理解为客户端与服务器之间数据交互请求的容器 请求上下文对象有:request.Session request:封装了HTTP请求的内容,针对的是http的请 ...

  5. 测开之路三十一:Flask基础之请求与相应

    from flask import requestrequest.pathrequest.methodrequest.formrequest.argsrequest.values 一般用form获取p ...

  6. flask中请求勾子

    请求勾子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: *在请求开始时,建立数据库连接; *在请求开始时,根据需求进行权限校验; *在请求结束时,指定数据的交互格式; 为了让每 ...

  7. flask基础之AppContext应用上下文和RequestContext请求上下文(六)

    前言 应用上下文和请求上下文存在的目的,官方文档讲的很清楚,可参考: http://www.pythondoc.com/flask/appcontext.html 应用上下文对象在没有请求的时候是可以 ...

  8. 第二篇 Flask基础篇之(闪现,蓝图,请求扩展,中间件)

    本篇主要内容: 闪现 请求扩展 中间件 蓝图 写装饰器,常用 functools模块,帮助设置函数的元信息 import functools def wrapper(func): @functools ...

  9. Flask——基础知识

    Flask应用程序 一个简单的Flask应用程序 # 导入flask程序 from flask import Flask # 初始化flask对象 app = Flask(__name__) # 装饰 ...

随机推荐

  1. 7.解决在python中用selenium启动FireFox浏览器启动不了的方法

    首次在利用python中的selenium启动FireFox浏览器时可能碰到如下问题 当输入如下代码时: from selenium import webdriver brower=webdriver ...

  2. Jedis操作Redis--Key操作

    /** * Key(键) * DEL,DUMP,EXISTS,EXPIRE,EXPIREAT,KEYS,MIGRATE,MOVE,OBJECT,PERSIST,PEXPIRE,PEXPIREAT,PT ...

  3. (五十八)c#Winform自定义控件-管道阀门(工业)

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  4. HDU-2089不要62-暴力或数位DP入门

    不要62 题意:给定区间,求在这个区间中有多少个数字,不包含4且不包含62: 这道题作为数位DP的入门题: 暴力也是可以过 #include<cstdio> #include <io ...

  5. BZOJ1878[SDOI2009]HH的项链+莫队算法模板

    题意:多次询问,求在一个区间中,有多少种珠子: 思路:莫队算法模板题目: 参考:https://www.cnblogs.com/RabbitHu/p/MoDuiTutorial.html #inclu ...

  6. 【转载】Why Learning to Code is So Damn Hard By Erik Trautman

    原文网址:https://www.thinkful.com/blog/why-learning-to-code-is-so-damn-hard/ 在罗老师的<算法竞赛 入门到进阶>总看到了 ...

  7. codeforces 864 E. Fire(背包+思维)

    题目链接:http://codeforces.com/contest/864/problem/E 题解:这题一看就很像背包但是这有3维限制也就是说背包取得先后也会对结果有影响.所以可以考虑sort来降 ...

  8. POJ 1002 487-3279 map

    487-3279 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 287874   Accepted: 51669 Descr ...

  9. codeforces 807 D. Dynamic Problem Scoring(贪心+思维)

    题目链接:http://codeforces.com/contest/807/problem/D 题意:对于动态计分的 Codeforces Round ,已知每题的 score 是根据 Round ...

  10. codeforces 766 C. Mahmoud and a Message(简单dp)

    题目链接:http://codeforces.com/contest/766/problem/C 题意:给你一个长度为n的字符串,这个字符串只包含小写字母,然后让你把这个字符串进行分割,形成若干个小的 ...