请求进入函数之前 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. OS_Architecture_MemoryHierarchy

    Hit: if the data CPU is looking for can not be found in a cache, it constitutes a hit. Miss: cache m ...

  2. 云享专家倪升武:微服务架构盛行的时代,你需要了解点 Spring Boot

    [摘要] 微服务架构的本质在于分布式.去中心化. 随着互联网的高速发展,庞大的用户群体和快速的需求变化已经成为了传统架构的痛点. 在这种情况下,如何从系统架构的角度出发,构建出灵活.易扩展的系统来快速 ...

  3. 深度研究:回归模型评价指标R2_score

    回归模型的性能的评价指标主要有:RMSE(平方根误差).MAE(平均绝对误差).MSE(平均平方误差).R2_score.但是当量纲不同时,RMSE.MAE.MSE难以衡量模型效果好坏.这就需要用到R ...

  4. shell 文本单词计数

    words.txt中的内容如下: the day is sunny the the the sunny is is 统计每个单词出现的次数,并降序输出. Unix Pipes脚本如下: cat wor ...

  5. luogu P1832 A+B Problem

    题目背景 ·题目名称是吸引你点进来的 ·实际上该题还是很水的 题目描述 ·1+1=? 显然是2 ·a+b=? 1001回看不谢 ·哥德巴赫猜想 似乎已呈泛滥趋势 ·以上纯属个人吐槽 ·给定一个正整数n ...

  6. iOS开发之UIWebView

    转自:http://www.cnblogs.com/zhuqil/archive/2011/07/28/2119923.html UIWebView是iOS sdk中一个最常用的控件.是内置的浏览器控 ...

  7. border-radius:50%和100%的区别

    border-radius 值类型-百分比 border-radius的值是百分比的话,就相当于盒子的宽度和高度的百分比. 我们知道在一个正方形内做一个面积最大的圆形,这个圆的半径就为正方形边长的一半 ...

  8. ajax之三级联动(省市县)

    ajax可以实现页面的局部刷新. 浏览器创建ajax引擎对象,ajax引擎对象向服务器发送请求,服务器把响应好的数据响应给ajax引擎对象,ajax引擎对象把数据放在合适的位置.       异步:先 ...

  9. LR静态存储/动态存储/指针变量脚本说明

    在一次教程学习中,看到该知识点并记录了下来,希望与大家共同探讨学习. 一.静态存储与动态存储 静态存储变量通常是在变量定义时就分定存储单元并一直保持不变, 直至整个程序结束.动态存储变量是在程序执行过 ...

  10. Bootstrap响应式栅格系统设计

    为了方便起见,我们通过1200px宽的屏幕来讲解bootstrap中container.row.col的css属性值为何这样设置的原理 在1200px屏幕中为何container的宽度设置为1170p ...