请求进入函数之前 before_request

  1. # -*- coding: utf-8 -*-  
  2. from flask import Flask, session, redirect, request  
  3.   
     
  4. app = Flask(__name__)  
  5. app.secret_key = '124gt'  
  6.   
     
  7.   
     
  8. @app.before_request                   # 请求进入视图函数之前加载  
  9. def be():  
  10.     print('before_request....')  
  11.     if request.path == '/login':  
  12.         return None  # 直接略过  
  13.   
     
  14.     if not session.get('user'):  
  15.         return redirect('/login')  
  16.   
     
  17.   
     
  18. @app.route('/')  
  19. def index():  
  20.     print('index')  
  21.     return 'index'  
  22.   
     
  23.   
     
  24. @app.route('/login')  
  25. def login():  
  26.     session['user'] = '111134'  
  27.     return '登陆成功'  
  28.   
     
  29.   
     
  30. app.run(host='0.0.0.0', debug=True)  

 

请求视图函数响应客户端之前加载 after_request

  1. @app.after_request                     # 请求视图函数响应客户端之前加载  
  2. def af1(args):  
  3.     # print(args)  # <Response 5 bytes [200 OK]>  
  4.     print('after_request...1')  
  5.     return args  
  6.   
     
  7. @app.after_request  
  8. def af2(args):  
  9.     print('after_request...2')  
  10.     return args  
  11.   
     
  12. @app.after_request  
  13. def af3(args):  
  14.     print('after_request...3')  
  15.     return args  
  16.   
     
  17. @app.route('/')  
  18. def index():  
  19.     print('index')  
  20.     return 'index' 

 

结果

  1. index  
  2. after_request...3  
  3. after_request...2  
  4. after_request...1  
  5. 192.168.31.1 - - [09/Dec/2019 06:31:22] "GET / HTTP/1.1" 200 -  

 

before_request和after_request异常情况下返回情况

  1. @app.before_request                   # 请求进入视图函数之前加载  
  2. def be1():  
  3.     print('before_request....1')  
  4.   
     
  5. @app.before_request  
  6. def be2():  
  7.     print('before_request....2')  
  8.     return '错误' # flask 返回的是HTTPRESPONSE对象  
  9.   
     
  10. @app.before_request  
  11. def be3():  
  12.     print('before_request....3')  
  13.   
     
  14. @app.after_request                     # 请求视图函数响应客户端之前加载  
  15. def af1(args):  
  16.     # print(args)  # <Response 5 bytes [200 OK]>  
  17.     print('after_request...1')  
  18.     return args  # 返回的是Response对象  
  19.   
     
  20. @app.after_request  
  21. def af2(args):  
  22.     print('after_request...2')  
  23.     return args  # 返回的是Response对象  
  24.   
     
  25. @app.after_request  
  26. def af3(args):  
  27.     print('after_request...3')  
  28.     return args  # 返回的是Response对象  
  29.   
     
  30. @app.route('/')  
  31. def index():  
  32.     print('index')  
  33.     return 'index'  

结果

after全部返回

  1. before_request....1  
  2. before_request....2  
  3. after_request...3  
  4. after_request...2  
  5. after_request...1  
  6. 192.168.31.1 - - [09/Dec/2019 06:39:30] "GET / HTTP/1.1" 200 -  

 

页面错误 errorhandler(404) 

  1. # 页面访问错误,找不到的时候,会执行这个装饰函数  
  2. @app.errorhandler(404)  
  3. def error(args):  
  4.     print(args)  
  5.     return '页面错误'  

Flask 特殊装饰器的更多相关文章

  1. python装饰器 & flask 通过装饰器 实现 单点登录验证

    首先介绍装饰器,以下是一段标注了特殊输出的代码.用于帮助理解装饰器的调用过程. import time def Decorator_one(arg1): info = "\033[1;31; ...

  2. Flask - 特殊装饰器 和 Flask工作结构模式(FBV, CBV)

    目录 Flask - 特殊装饰器 和 Flask工作结构模式 @app.errorhandler() @app.before_request @app.after_request FBV和CBV Fl ...

  3. flask类装饰器

    from flask import Flask,request,views from functools import wraps app = Flask(__name__) #自定义登录装饰器 de ...

  4. Flask 之装饰器有关

    - 先记住一句话:自定义python装饰器时一定要记住使用@functools.wraps(func)修饰wrapper - 在Flask中使用装饰器遇到AssertionError: View fu ...

  5. flask之Flask特殊装饰器

    flask_decorators.py ''' Flask中的特殊装饰器: (1)@app.before_request 请求到达视图函数之前,进行自定义操作,类似django中间件中的process ...

  6. Flask特殊装饰器

    @app.errorhandler():重定义错误返回信息 @app.errorhandler(404) #监听多少写多少 def error404(message): return f"你 ...

  7. Flask(2)- 装饰器的坑及解决办法、flask中的路由/实例化配置/对象配置/蓝图/特殊装饰器(中间件、重定义错误页面)

    一.装饰器的坑以及解决方法 1.使用装饰器装饰两个视图函数,代码如下 from flask import Flask, redirect, render_template, request, sess ...

  8. Flask蓝图Blueprint和特殊装饰器

    Flask 中的 蓝图 Blueprint 不能被run的flask实例:相当于django中的app01 应用 蓝图作用:功能隔离 路由隔离 Blueprint就是 一个不能run的flask 蓝图 ...

  9. Python装饰器笔记

    DRY(Don't Repeat Yourself)原则: 一般是指在写代码的时候尽量避免重复的实现.违反DRY原则导致的坏处很容易理解,例如维护困难,修改时一旦遗漏就会产生不易察觉的问题. 一.函数 ...

随机推荐

  1. JAVA学习第一课-手工笔记

    JVM:JAVA虚拟机,JAVA核心,跨平台,作用是翻译. JRE:运行环境,包含JVM和运行的核心类库. JDK:全新开发使用,包含JRE,编译工具: 核心是JVM 以下是关系库 安装路径不要有空格 ...

  2. c获取shell中的参数

    问题背景 在Linux中我们会使用到shell,来完成输入参数的获取,就如同下面的形式,这种形式在进行多语言编程和调用有着非常重要的作用 一.传递的过程 1.1 原理模型如下: 1.1.1 可执行sh ...

  3. 小白探究UE4网络系列(一)、UE4网络基础类分析

    转载请标明出处:http://www.cnblogs.com/zblade/ 一.概要 捣鼓UE4也有两个多月了,从这儿开始,逐步探究UE4中经典的值复制,RPC两种同步方式.想要弄到其复制和调用的原 ...

  4. 2019牛客全国多校训练四 I题 string (SAM+PAM)

    链接:https://ac.nowcoder.com/acm/contest/884/I来源:牛客网 题目描述 We call a,ba,ba,b non-equivalent if and only ...

  5. CYPRESS最新的USB3.0控制器

    CYPRESS近日发布了其最新的USB3.0控制器,产品序号为CX3,主要是针对高像素摄像头方面的应用,接口支持MIPI的CSI-2,并不支持传统的基于并口的数据传输模式. MIPI(Mobile I ...

  6. 【JS】379- 教你玩转数组 reduce

    reduce 是数组迭代器(https://jrsinclair.com/articles/2017/javascript-without-loops/)里的瑞士军刀.它强大到您可以使用它去构建大多数 ...

  7. 3个Spring Boot核心注解,你知道几个?

    Spring Boot 核心注解讲解 Spring Boot 最大的特点是无需 XML 配置文件,能自动扫描包路径装载并注入对象,并能做到根据 classpath 下的 jar 包自动配置. 所以 S ...

  8. vue-cli3抽离配置文件,动态修改打包后配置

    由于项目有外部部署需求,对不同的环境前端调用后台的地址不一样,且不能提前预知必须到部署现场后才能确定后端地址,故需要将调用后端相关的配置抽离到文件中,打包后部署人员在方便现场修改. 思路如下: 1.由 ...

  9. 建议2:注意Javascript数据类型的特殊性---(1)防止浮点数溢出

    1.防止浮点数溢出 二级制的浮点数不能正确地处理十进制的小数,因此 0.1+0.2不等于0.3 num = 0.1+0.2; //0.30000000000000004 这是JavaScript中经常 ...

  10. django甜甜的弹窗

    GitHub中甜甜的弹窗地址: https://github.com/lipis/bootstrap-sweetalert 直接简单粗暴选择右下角的download,下载到本地一份文件 小猿取经中的相 ...