特殊装饰器 @app.before_request 和 @app.after_request以及@app.errorhandler()

一、背景:

Flask我们已经学习很多基础知识了,现在有一个问题

我们现在有一个 Flask 程序其中有3个路由和视图函数,如下:

from flask import Flaskapp = Flask(__name__)  # type:Flask@app.route("/login")
def login():return "Login"@app.route("/index")
def index():return "Index"@app.route("/home")
def home():return "Login"app.run("0.0.0.0", 5000)

如果登陆了,就可以访问 index 和 home 页面,如果没登录就跳转到 login 登录

要怎么解决呢, session 对, 用 session 除了 Login 函数之外的所有函数里面全校验 session 是否登录了

太麻烦了,现在咱们只有3个函数,如果成百上千个怎么整啊

装饰器,对没错,装饰器是一个很好的方案,但是啊,我现在还是成败上千个函数,我要在每一个函数定义的时候加上@装饰器,还是很麻烦

其实这两个特殊装饰器就像是Django中的中间件一样。

二、 @app.before_request  :在请求(request)之前做出响应

from flask import Flask
from flask import request
from flask import redirect
from flask import sessionapp = Flask(__name__)  # type:Flask
app.secret_key = "DragonFire"@app.before_request
def is_login():if request.path == "/login":return Noneif not session.get("user"):return redirect("/login")@app.route("/login")
def login():return "Login"@app.route("/index")
def index():return "Index"@app.route("/home")
def home():return "Login"app.run("0.0.0.0", 5000)

@app.before_request 也是一个装饰器,他所装饰的函数,都会在请求进入视图函数之前执行

request.path 是来读取当前的url地址如果是 /login 就允许直接通过 return None 你可以理解成通过放行

校验session中是否有user 如果没有的话,证明没有登录,所以毫不留情的 redirect("/login") 跳转登录页面

还有一个要提的 @app.before_first_request 它与 @app.before_request 极为相似或者说是一模一样,只不过它只会被执行一次

三、@app.after_request  :在响应(response)之前做出响应

@app.after_request
def foot_log(environ):if request.path != "/login":print("有客人访问了",request.path)return environ

四、小结:

@app.before_request  装饰器的执行是自上而下;@app.after_request 装饰器的执行是自下而上。例如:be1 - be2 - be3 - af3 - af2 - af1;

异常情况下的执行顺序:be1 - af3 - af2 - af1

五、@app.errorhandler() :重定义错误页面返回信息

比如:当404时则会执行下面的视图函数@app.errorhandler(404)
def error404(error_info):
return 三剑客+小儿子

Python flask 特殊装饰器 @app.before_request 和 @app.after_request 以及@app.errorhandler介绍相关推荐

  1. python中的装饰器怎么运行_Python 装饰器入门(上)

    翻译前想说的话: 这是一篇介绍python装饰器的文章,对比之前看到的类似介绍装饰器的文章,个人认为无人可出其右,文章由浅到深,由函数介绍到装饰器的高级应用,每个介绍必有例子说明.文章太长,看完原文后 ...

  2. python装饰器原理-python 中的装饰器及其原理

    装饰器模式 此前的文章中我们介绍过装饰器模式: 装饰器模式中具体的 Decorator 实现类通过将对组建的请求转发给被装饰的对象,并在转发前后执行一些额外的动作来修改原有的部分行为,实现增强 Com ...

  3. python装饰器类-PYTHON里的装饰器能装饰类吗

    扩展回答 如何理解python里的装饰器 通常可以理解它是一个hook 的回调函数. 或者是理解成python 留给二次开发的一个内置API. 一般是用回调和hook 方式实现的. 如何理解Pytho ...

  4. python类装饰器详解-python 中的装饰器详解

    装饰器 闭包 闭包简单的来说就是一个函数,在该函数内部再定义一个函数,并且这个内部函数用到了外部变量(即是外部函数的参数),最终这个函数返回内部函数的引用,这就是闭包. def decorator(p ...

  5. python中的装饰器decorator

    python中的装饰器 装饰器是为了解决以下描述的问题而产生的方法 我们在已有的函数代码的基础上,想要动态的为这个函数增加功能而又不改变原函数的代码 例如有三个函数: def f1(x):return ...

  6. python生成器和装饰器_python之yield与装饰器

    防伪码:忘情公子著 python中的yield: 在之前发布的<python之列表解析与生成器>中我们有提到过,生成器所实现的是跟列表解析近似的效果,但是我们不能对生成器做一些属于列表解析 ...

  7. 二十一、深入Python强大的装饰器

    @Author: Runsen 文章目录 闭包 装饰器 嵌套函数的装饰器 带参数嵌套函数的装饰器 类装饰器 嵌套装饰器 @Date:2019年07月11日 最近有同学在问关于Python中装饰器的问题 ...

  8. Python闭包与装饰器

    Python闭包与装饰器 一.闭包       函数是一个对象,所以可以对象的形式作为某个函数的结果返回.函数执行完后内部变量将会被回收.在闭包中,由于内部函数存在对外部函数的变量的引用,所以即使外部 ...

  9. python高级语法装饰器_Python高级编程——装饰器Decorator超详细讲解上

    Python高级编程--装饰器Decorator超详细讲解(上篇) 送你小心心记得关注我哦!! 进入正文 全文摘要 装饰器decorator,是python语言的重要特性,我们平时都会遇到,无论是面向 ...

最新文章

  1. 聊天ListView使用ViewHolder
  2. 对于个人(注册表)与团队(团队表)(两张表没有关联)的展示与可空判断
  3. PHP获取本月起始和终止时间戳
  4. Jquery.ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
  5. div居中和table居中,jQuery获取下拉列表值
  6. html中元素的几种居中方法
  7. win10系统如何设置局域网服务器,win10系统设置局域网地址的操作方法
  8. python后台开发性能问题_《Python高性能编程》——2.14 确保性能分析成功的策略-阿里云开发者社区...
  9. 计算机专业大学生每天睡多久,大学睡眠时间最少的10大专业,没想到第一名竟是......
  10. cpplint中filter参数的每个可选项的含义
  11. 【Go】Go 语言切片(Slice)
  12. openoffice linux 目录,Linux下openoffice的安装
  13. JS打包工具rollup——完全入门指南
  14. LSTM -长短期记忆网络(RNN循环神经网络)
  15. python中arcsec_在Python类中继承Cython类
  16. python爬b站弹幕_【Python爬虫】第五课(b站弹幕)
  17. CoreDNS 性能优化
  18. C语言项目源码,C语言源码大全
  19. 上海理工大学计算机学硕调剂,上海理工大学2019考研调剂信息公告
  20. Linux鼠标变x,VNC 的应用及灰屏鼠标变X问题

热门文章

  1. C++中拷贝构造函数
  2. Nature:将基因测序带到前所未有的精度,人类首次具有在任何组织中研究基因突变的能力
  3. SIP系统怎么禁用?SIP系统完整性保护关闭方法(含M1)
  4. 拉丁超立方抽样matlab代码_想要数据分析更快?超良心的笔记本/台式电脑配置推荐!...
  5. 第18课 闰年与平年 《小学生C++趣味编程》
  6. java 设置文本颜色_设置文本中的字体的颜色
  7. 在python中要表示一个空的代码块可以使用空语句什么_Python条件判断语句if
  8. STM32F407+CubeMX - 使用GPIO翻转+示波器测量函数的执行时间
  9. c语言转义字符%,c语言转义字符
  10. eclipse远程连接hadoop_hadoop集群搭建详细方法