请求进入函数之前 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. 关于Python中的错误与异常,你是否了解的够仔细?

    每次版本结束都描述这着同样的错误,相似的问题,但始终没见解决.所以今天,我就来总结下Python的错误与异常! 异常与错误 错误 语法错误 可以通过IDE或者解释器给出提示的错误 opentxt('a ...

  2. GRPC的metadata使用

    文章目录 一.简析 1.创建metadata 2.发送metadata 3.接收metadata 二.代码举例 1.proto文件编写 2.server端编写 3.client端编写 三.实际使用举例 ...

  3. 移动开发在路上-- IOS移动开发系列 多线程二

    最近太忙没太多的时间,忙碌的码农生活空下来一点时间,都会挤出来看一些技术或者咨询的文章,废话不多说,直奔主题. 接着上一次的继续说. 定时器在多线程的使用 NSRunLoop 是线程相关的基础框架的一 ...

  4. [TimLinux] JavaScript input框的onfocus/onblur/oninput/onchange事件介绍

    1. onfocus事件 input框获取到焦点时,触发了该事件,比如获取到焦点时,修改input框的背景色.这个功能其实可以使用css的伪类:focus来定义. 2. onblur事件 这个与onf ...

  5. 2018HDU多校训练-3-Problem D. Euler Function

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=6322 Problem Description In number theory, Euler's toti ...

  6. Nginx安装echo模块echo-nginx-module

    https://github.com/openresty/echo-nginx-module 这个模块不包含在 Nginx 源码中,安装方法: 1. 首先下载模块源码:https://github.c ...

  7. MySQL 表记录查询小练习

    表记录查询小练习 查看岗位是teacher的员工姓名.年龄 查看岗位是teacher且年龄大于26岁的员工姓名.年龄 查看岗位是teacher且薪资在12000-16000范围内的员工姓名.年龄.薪资 ...

  8. 前端小白要搞懂什么是HTML,看这一篇就够了

    本文是<HTML5与CSS3基础语法自学教程>的第一篇,首发于[前端课湛]微信公众号. 导读:本小节主要讲解 HTML 的基本信息,其中包含 HTML 概念.HTML 发展历程和 HTML ...

  9. Django聚合查询 orm字段及属性

    目录 一 聚合查询 1. 级联 级联删除 级联更新 2. 聚合函数 使用 aggregate 使用场景 3. 分组查询 语法 使用 annotate 代码 4. F与Q查询 F查询 Q查询 二 ORM ...

  10. 《Java基础知识》Java集合(Map)

    Java集合主要由2大体系构成,分别是Collection体系和Map体系,其中Collection和Map分别是2大体系中的顶层接口. 今天主要讲:Map主要有二个子接口,分别为HashMap.Tr ...