请求进入函数之前 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. 2019-2020-1 20199304《Linux内核原理与分析》第四周作业

    第三章 MenuOs的构造 一.前情回顾 计算机的三大法宝: -存储程序计算机 -函数调用堆栈 -中断 操作系统的两把宝剑: -中断上下文的切换(保存现场和恢复现场) -进程上下文的切换 二.3.1 ...

  2. css实现input表单验证

    有没有办法只通过css来确定input标签是否有输入? 我有这个想法是因为我想完成一个自动补全的input部件,最基本的功能是: 如果input没有内容,这隐藏下拉框 反之,显示下拉框 我找到了一个也 ...

  3. JS获得天数差异

    //获得天数差异 function datedifference(sDate1, sDate2) { //sDate1和sDate2是2006-12-18格式 var dateSpan, tempDa ...

  4. go基础之基本数据结构(数组、slice、map)

    go基本的数据结构有数组.slice.map,高级数据结构为结构体为用户自定义类型.本片文章主要讲解三大基本数据结构. 数组 slice Map 数组 数组是包含单个类型的元素序列,但是长度固定的数据 ...

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

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

  6. python学习-文件创建读取

    # 文件创建 # 读写# 文件存在?不存在?在操作系统上# 读 read r 写 write w# 打开一个文件# fs = open("xiaojian.txt",encodin ...

  7. Oracle GoldenGate for Sql Server连接ODBC失败的处理方法

    Oracle GoldenGate for Sql Server连接oracle数据库的时候还是比较容易的,命令行下面只要: GGSCI> dblogin useridalias [ alias ...

  8. Spring Cloud第十篇 | 分布式配置中心Config

    ​ 本文是Spring Cloud专栏的第十篇文章,了解前九篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Clo ...

  9. WinForm GroupBox控件重绘外观

    private void groupBoxFun_Paint(PaintEventArgs e, GroupBox groupBox){ e.Graphics.Clear(groupBox.BackC ...

  10. 原生JS实现移动端轮播图

    功能描述: 自动无缝轮播图片,底部小圆点跟图片保持一致:手指左右移动轮播图,移动距离大于50px播放下一张(或上一张),小于50px则回弹 具体功能实现: 1.定时器 自动轮播图片 先声明一个inde ...