什么是请求勾子?

为了让每个视图函数避免编写重复的功能代码,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. Linux基础命令和文件权限

    Linux命令与文件权限 Linux基础命令   reboot  重启   cd         切换目录   cd ..     回到上一级目录   cd ~      回到主目录   cd /  ...

  2. 大型互联网公司分布式ID方案总结

    ID是数据的唯一标识,传统的做法是利用UUID和数据库的自增ID,在互联网企业中,大部分公司使用的都是Mysql,并且因为需要事务支持,所以通常会使用Innodb存储引擎,UUID太长以及无序,所以并 ...

  3. VS2017 之 MYSQL实体数据模

    Photon Server 和 Unity3D 数据交互: Photon Server 服务端编程 Unity3D 客户端编程 VS2017 之 MYSQL实体数据模 一.新建数据库连接后,点击下一步 ...

  4. CH4301 Can you answer on these queries III 题解

    给定长度为N的数列A,以及M条指令 (N≤500000, M≤100000),每条指令可能是以下两种之一: "2 x y",把 A[x] 改成 y. "1 x y&quo ...

  5. XSS漏洞之加载远程js文件

    这次在对一个系统渗透测试过程中,发现一个XSS漏洞,可弹窗,并且没有httponly 但是在尝试加载远程js文件的时候发现,script标签被过滤掉了,准确的说应该是服务器后端在识别到输入内容有< ...

  6. SpringBoot应用启动过程分析

    真的好奇害死猫!之前写过几个SpringBoot应用,但是一直没搞明白应用到底是怎么启动的,心里一直有点膈应.好吧,趁有空去看了下源码,写下这篇博客作为学习记录吧! 个人拙见,若哪里有理解不对的地方, ...

  7. Mybatis系列(二)配置

    Mybatis系列(二)配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configu ...

  8. Android图片的缩放效果

    一.概述 Android 图片要实现:手势滑动,双击变大,多点触控的效果. 其实是有一定难度的,我们需要用Matrix ,GestureDetector 等等需要完成一个复杂的逻辑才能实现,然而今天我 ...

  9. JavaEE就业学习路线(给初学者以及自学者一个学习方向)

    大家按这个路线学完后基本可以找工作了 第一节java入门 1-Java 背景介绍 2-Java 入门程序的编写 3-环境配置 4-基本概念介绍 5-类型转换 6-开发工具使用 第二节java基础 1- ...

  10. jmeter 分布式压测

    1.配置主机名称 查看主机名 hostname 配置主机别名 vim /etc/hosts 2.分布式主机也需要配置主机别名 3.每个主机上必需有JAVA环境和jmeter环境 4.如果脚本有参数文件 ...