当前位置: 首页 > news >正文

Flask入门(7):内置装饰器(钩子函数)

目录

  • 7.内置装饰器(钩子函数)
    • 7.1 before_request
    • 7.2 after_request
    • 7.3 before_first_request
    • 7.4 error_handlers
    • 7.5 template_filter
    • 7.6 template_global

复习装饰器基础及其应用,可参考文章:闭包和装饰器

7.内置装饰器(钩子函数)

7.1 before_request

before_request用于请求前验证

如果before_request里的其中一个函数有返回值,则直接跳到after_request的列表里从后往前验证。

# before_request 和 after_request
from flask import Flaskapp = Flask(__name__)@app.before_request
def xxx1():print('前1')@app.before_request
def xxx2():print('前2')@app.route('/x1', methods=['GET', 'POST'])
def X1():print('视图函数x1')return '视图函数x1'if __name__ == '__main__':app.run()

例子:使用before_request做登录验证

from flask import Flask, request, session, redirectapp = Flask(__name__)
app.secret_key = "sasfangndga"@app.before_request
def check_login():if request.path == '/login':return Noneuser = session.get('user_info')if not user:return redirect('/login')@app.route('/login', methods=['GET', 'POST'])
def login():return '视图函数x1'@app.route('/index', methods=['GET', 'POST'])
def X2():print('视图函数x2')return '视图函数x2'if __name__ == '__main__':app.run()

7.2 after_request

after_request用于请求后验证

after_request效果和django 的process_response是一样的,必须有返回值,没有则报错。

# before_request 和 after_request
from flask import Flaskapp = Flask(__name__)@app.before_request
def xxx1():print('前1')@app.before_request
def xxx2():print('前2')@app.after_request
def yyy1(response):print('后1')return response@app.after_request
def yyy2(response):print('后2')return response@app.route('/x1', methods=['GET', 'POST'])
def X1():print('视图函数x1')return '视图函数x1'@app.route('/x2', methods=['GET', 'POST'])
def X2():print('视图函数x2')return '视图函数x2'if __name__ == '__main__':app.run()# 执行顺序如下
# 前1
# 前2
# 视图函数x2
# 后2
# 后1

flask中间件装饰器执行顺序: 如果多个app.before_request和app.after_request, app.before_request是按照从上而下执行(文件的上下),app.after_request是自下而上执行。

7.3 before_first_request

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

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

7.4 error_handlers

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

7.5 template_filter

app.template_filter(‘过滤器名字’)。

flask 中用@app.template_filter(‘name’)来自定义名字为name的过滤器,name可以不指定,当不指定的时候使用函数的名称。

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

7.6 template_global

声明全局可用的模板函数,见模板引擎-变量里的示例

http://www.lryc.cn/news/14183.html

相关文章:

  • Java8新特性
  • 哈希表题目:设计哈希集合
  • java static关键字 万字详解
  • 光谱实验反射、透射光谱测量
  • 【基础算法】之 冒泡排序优化
  • Python | 线程锁 | 3分钟掌握【同步锁】(Threading.Lock)
  • Linux下安装MySQL8.0的详细步骤(解压tar.xz安装包方式安装)
  • leaflet 绘制多个点的envelope矩形(082)
  • CAJ论文怎么批量免费转换成Word
  • 面试必问: 结构体大小的计算方法
  • Java中super函数的用法
  • 第十一届“泰迪杯”数据挖掘挑战赛携“十万”大奖火热来袭
  • 分享三个可以在家做的正规兼职工作,看到就是赚到
  • javaFx实现鼠标穿透画布,同时操作画布和桌面,背景透明,类似ppt批注
  • 客户服务知识库的最佳实践7个步骤
  • 多重继承的虚函数表
  • 第11篇:Java开发工具使用和代码规范配置
  • Rust模式匹配
  • GIT:【基础一】必要配置和命令
  • 黑马程序员-Linux系统编程-01
  • Python|每日一练|动态规划|图算法|散列表|数组|双指针|单选记录:不同路径|求两个给定正整数的最大公约数和最小公倍数|删除有序数组中的重复项
  • Java常用框架(一)
  • 基于 DSP+FPGA 的高清图像跟踪系统研制
  • apisix部署
  • 无聊小知识01.serialVersionUID的作用
  • pytorch搭建手写数字识别LeNet-5网络,并用tensorRT部署
  • 扬帆优配|五千亿巨头一度涨停! 4天3倍,港股又现“狂飙”股!
  • RocketMQ之(一)RocketMQ入门
  • 推荐系统[三]:粗排算法常用模型汇总(集合选择和精准预估),技术发展历史(向量內积,WideDeep等模型)以及前沿技术
  • vue3 + vite 使用 svg 可改变颜色