请求进入函数之前 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. Thinkphp5——实现分页(模型和Db分页,多种方法)

    现在很多网站的数据量的很多,如果全部在一页里显示效果不好,数据量太大,那怎么办?这时我们就需要分页,而分页的好处就是分段显示数据,这样页面就不用加载很多数据,需要时才加载,下面我教大家实现ThinkP ...

  2. sar命令,linux中最为全面的性能分析工具之一

    sar是System Activity Reporter(系统活动情况报告)的缩写.这个工具所需要的负载很小,也是目前linux中最为全面的性能分析工具之一.此款工具将对系统当前的状态就行取样,然后通 ...

  3. 带着canvas去流浪系列之五 绘制K线图

    [摘要] 用canvas原生API实现百度Echarts 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 任务说明 使用原生canvasAPI绘制 ...

  4. 区块链学习笔记:DAY01 区块链的技术原理

    其实很早之前就听过区块链,也看过有关区块链的介绍,那个时候的理解主要还是一句话:分布式记账 然后开始关注比特币,听了有几年了,对于其来历.用途其实一直都是一知半解. 这次的课算是第一次以一个学员的身份 ...

  5. apache thrift 和 apache jersey 记录

    几篇好的入门文档链接: 1. Hello World by Thrift Using Java 2. Thrift 实例 Helloworld 3. Thrift版的Hello World 4. Th ...

  6. acm博弈论基础总结

    acm博弈论基础总结 常见博弈结论 Nim 问题:共有N堆石子,编号1..n,第i堆中有个a[i]个石子. 每一次操作Alice和Bob可以从任意一堆石子中取出任意数量的石子,至少取一颗,至多取出这一 ...

  7. CodeForces1006E- Military Problem

    E. Military Problem time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  8. [知也无涯]GAN对人脸算法的影响

    红绣被,两两间鸳鸯.不是鸟中偏爱尔,为缘交颈睡南塘.全胜薄情郎. 看到一篇GAN对人脸图像算法的影响,决心学习一个. 人脸检测 这也是我最关注的模块.文章推荐了极小面部区域人脸识别Finding ti ...

  9. DRF Django REST framework 之 路由器与版本控制组件(七)

    路由器 一些Web框架提供了用于自动确定应如何将应用程序的URL映射到处理传入请求的逻辑的功能. 而DRF的路由器组件也提供了一种简单,快速且一致的方式将视图逻辑映射到一组URL上. 路由器组件的使用 ...

  10. todo demo

    Todo 功能实现 https://rencoo.github.io/appDemo/todo/index.html ---1.添加事项 ---2.置顶事项 ---3.删除事项 ---4.用时排序 - ...