效果类似于Django的process_request装饰器

@app.before_request
def before(*args,**kwargs):print('请求之前')'''如果允许通过访问,可以return None该装饰器装饰的函数如果有return其他内容则直接结束访问,效果有点类似django的process_reqeust中间件方法。比如通过这个装饰器写登陆验证,判断其是否有session,没有则不允许访问,有则继续访问然后通过request.path判断访问的函数,如果是登陆(白名单)则通过。request.url 是完整的urlrequest.path是域名后面的url正则'''if request.path == '/login':return Noneuser = session.get('user_info')if user:return Nonereturn redirect('/login')

before_request

第一次来请求操作的装饰器

@app.before_first_request
def first(*args,**kwargs):pass
'''
只有第一次请求时候才执行的函数装饰器
'''

before_first_request

类似于process_response

@app.after_request
def after(response):#效果和process_response是一样的,必须有返回值,没有则报错。print('我走了')return response

after_request

flask中间件装饰器的执行顺序:

如果多个app.before_request和app.after_request,
那么执行顺序也和django类似,
app.before_request是按照从上而下执行(文件的上下),app.after_request是自下而上执行。
如果在app.before_request中return了其他内容,请求被拦截,那么不会执行视图函数,
直接从最后一个app.after_reqeust倒着开始执行所有after_request
自定义错误页面

 @app.error_handlers(404)def error_404(arg):'''自定义错误页面,根据状态码定制'''return "404错误啦"根据状态码自定义错误页面

error_handlers

模板中定制方法:
前端直接调用后端函数的装饰器
@app.template_global()
def xx(a1,a2):return a1+a2
'''
这个装饰器的作用就是,可以在前端直接通过{{ xx(1,2)}}来调用后端的这个函数。
'''

相当于filter的装饰器

@app.template_filter()
def db(a1,a2,a3):return a1+a2+a3
'''
效果和django的Filter相似,前端渲染的时候需要注意写法
{{ 1|db(2,3)}} 1是第一个参数,后面是2,3参数。
'''

重写app.wsgi_app:

  

from flask import Flaskapp = Flask(__name__)@app.route('/index')
def index():print('index')return "Index"class Middleware(object):def __init__(self,old):self.old = olddef __call__(self, *args, **kwargs):print('开始之前')ret = self.old(*args, **kwargs)print('开始之后')return retif __name__ == '__main__':app.wsgi_app = Middleware(app.wsgi_app)app.run()

通过重写这个类的__call__方法,效果同django的process_request,process_response

转载于:https://www.cnblogs.com/HZY258/p/9174969.html

flask的各种装饰器相关推荐

  1. python flask route中装饰器的使用

    问题:route中的装饰器为什么感觉和平时使用的不太一样,装饰器带参数和不太参数有什么区别?被修饰的函数带参数和不带参数有什么区别? 测试1:装饰器不带参数,被修饰的函数也不带参数. def log( ...

  2. Flask系列06--(中间件)Flask的特殊装饰器 before_request,after_request, errorhandler

    一.使用 Flask中的特殊装饰器(中间件)方法常用的有三个 @app.before_request # 在请求进入视图函数之前 @app.after_request # 在请求结束视图函数之后 响应 ...

  3. 如何理解Python装饰器?

    Python 装饰器使用非常地简单.任何会使用 Python 函数的人都可以学习使用装饰器: Python 1 2 3 @somedecorator def some_function():      ...

  4. python中wraps_python 装饰器及标准库functools中的wraps

    最近在看 flask的视图装饰器 时,忽然想起预(复)习一下python的装饰器. 这里有一篇比较好的讲解装饰器的书写的 Python装饰器学习(九步入门) . 这里不单独记录装饰器的书写格式了,重点 ...

  5. Python flask 特殊装饰器 @app.before_request 和 @app.after_request 以及@app.errorhandler介绍

    特殊装饰器 @app.before_request 和 @app.after_request以及@app.errorhandler() 一.背景: Flask我们已经学习很多基础知识了,现在有一个问题 ...

  6. python装饰器解析请求参数_我如何在装饰器中获得Flask可选的URL参数?

    有一种更好的机制可以验证内置到Werkzeug(和Flask)中的url值.定义一个converter并像使用路由中的任何其他转换器一样使用它(例如,< int:id>). from we ...

  7. 获取flask的app.route装饰器所有url

    先来普及下python装饰器,有装饰器带变量的,有装饰器不带变量 def decor(func):print("这是最外层func函数")def wrapper(*args,**k ...

  8. flask装饰器顺序

    官方文档 To use the decorator, apply it as innermost decorator to a view function. When applying further ...

  9. Flask实战2问答平台-登录限制(装饰器)

    我们来解决上一文章说到的,为登录不能点击发布问答功能 (一)先写一个装饰器 装饰器教程参考廖雪峰教程 http://t.cn/RK0SaGl from functools import wraps # ...

  10. Flask中那些特殊的装饰器

    模板相关的装饰器 @app.template_global() 用法: @app.template_global() # 记得加括号 def jiafa(a, b): # 这个方法每调用一次就需要传一 ...

最新文章

  1. Chemistry.AI | 基于图卷积神经网络(GCN)预测分子性质
  2. 专转本计算机应用基础,江苏省专转本计算机应用基础模拟题
  3. texturepacker使用心得
  4. Github标星2w+,热榜第一,如何用Python实现所有算法
  5. 一个古帝国做产品的故事
  6. 使用@host获得宿主元素注入器里注入的内容
  7. html如何实现切换效果,纯CSS实现页签切换效果
  8. 蓝桥杯第七届省赛JAVA真题----压缩变换
  9. c语言编写网页图形界面代码,「分享」C语言如何编写图形界面
  10. ECMAScript 6 学习资料
  11. 1024 许个愿吧,万一实现了呢?
  12. 谭浩强 C程序设计 8.2 求方程 的根,用三个函数分别求当b^2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。...
  13. iframe是什么?iframe用法详解。
  14. 201903-1小中大
  15. 微信小程序授权登录取消授权重新授权处理方法 附可用代码
  16. android应用和苹果,同一款软件,在安卓和苹果间差别原来这么大
  17. 2022高处安装、维护、拆除考试模拟100题及模拟考试
  18. LTE-5G学习笔记18--5G关键技术(想学更多快进群)
  19. 降碳为先 成本为王!绿色数据中心的能源“新”解法
  20. ai人工智能将替代人类_教AI学习人类如何有效计划

热门文章

  1. C++ 2022常见知识点
  2. 对称二叉树(C++)
  3. C++ 从入门到入土(English Version) Section 2:Computer Memory and Number Systems
  4. OSI七层参考模型、TCP/IP参考模型、数据封装与解封装、TCP三次握手四次挥手及面试题
  5. 配置centos7下的Apache服务
  6. JavaScript正则表达式19例(7)
  7. DEFERRED_SEGMENT_CREATION
  8. 用OpenGL进行立方体表面纹理贴图
  9. jquery.form.js实现将form提交转为ajax方式提交的使用方法
  10. 【转】js获取浏览器信息和客户端硬件信息