视图函数中的装饰器

-----------------------视图中的装饰器----------------------
1、如果使用的是函数视图,那么自己定义的装饰器必须放在`app.route`下面,
否则这个装饰器起不到任何作用;
2、类视图的装饰器,需要重写类视图中的一个类属性`decorators`,这个类属性
是一个列表或元组都可以,里面装的就是左右装饰器;

app.before_request

在请求(request)进入视图函数之前执行,是全局的装饰器,每次请求都会走一遍这个装饰器,这和django的中间件很像

登录验证

from flask import Flask,render_template,send_file,request,redirect,session

app = Flask(__name__,template_folder="templates")
app.secret_key="henry" @app.before_request # 相当于django的中间件
def auth():
# 白名单放行
if request.path == "/login":
return None
# 判断是否是登录用户
if session.get("username"):
return None
else:
# 如果不是登录页面就会跳转到登录页面
return redirect("login") @app.route("/login",methods=["GET","POST"])
def login():
if request.method=="GET":
return render_template("login.html")
username = request.form.get("username")
password = request.form.get("password")
# 判断用户名和密码是否正确
if username=="henry" and password=="":
# 登录成功后设置session
session["username"] = username
# 访问home页面之前会先走before_request装饰器,每个请求都会完整的走一遍before_request装饰器
return redirect("home")
else:
return "用户名或密码错误" @app.route('/home')
def home():
return "home" if __name__ == '__main__':
app.run()

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

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

app.after_request

在响应(response)返回客户端之前执行 , 结束视图函数之后

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

请求生命周期

无异常

顺序:be1 - be2 - be3 - 视图函数 - af3 - af2 - af1

有异常

顺序:be1 - be2 - af3 - af2 - af1

errorhandler

重定义错误信息

1.有参数的装饰器errorhandler(监听错误状态码 5xx 4xx Int)
2.所装饰的函数必须有一个形参来接受 errorMessage
# 监测错误状态码
@app.errorhandler(404) # 必须是int,而且必须是errorcode
def error(error_Message):
# 跳转到百度的错误页面
return redirect("https://www.baidu.com/search/error.html")

页面

app.template_global

1、用法:可以在全局范围的模板中使用这个函数, 而不用通过参数传到模板中
@app.template_global() # 记得加括号
# 这个方法每调用一次就需要传一次, 将他做成一个全局的就用这么麻烦了
def jiafa(a, b):
return int(a) + int(b)
2、在模板中使用
<h2>{{ jiafa(100, 30)}}</h2>

app.template_filter

1、用法
@app.template_filter()
def jianfa(a, b, c):
return a - b - c
2、在模板中这样使用
<h2>{{ 100|jianfa(100, 300) }}</h2>

Flask-特殊的装饰器的更多相关文章

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

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

  2. flask --- 03 .特殊装饰器, CBV , redis ,三方组件

    一.特殊装饰器(中间件) 1.before_request 在请求进入视图函数之前 @app.before_request def look(): 2. after_request 在结束视图函数之后 ...

  3. flask session,蓝图,装饰器,路由和对象配置

    1.Flask 中的路由   *endpoint - url_for 反向地址  *endpoint 默认是视图函数名  *methods 指定视图函数的请求方式,默认GET  defaults={& ...

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

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

  5. flask(1.1)装饰器装饰多个视图函数出现的问题

    目录 1.装饰器装饰多个视图函数出现的问题 2.使用装饰器修复技术解决该问题 1.装饰器装饰多个视图函数出现的问题 代码实例: from flask import Flask, request, re ...

  6. flask框架-decorator装饰器

    调用包: from functools import wraps 装饰器其实就是一个函数:参数是一个函数,返回值是一个函数 1.装饰器使用是通过@符号,在函数的上面 2.装饰器中定义的函数,要使用*a ...

  7. flask模板语言,装饰器,路由及配置

    1.模板语言jinja2 Flask中默认的模板语言是Jinja2 1.0 模板传参 from flask import Flask,render_template app = Flask(__nam ...

  8. Flask 之装饰器有关

    - 先记住一句话:自定义python装饰器时一定要记住使用@functools.wraps(func)修饰wrapper - 在Flask中使用装饰器遇到AssertionError: View fu ...

  9. [Python自学] Flask框架 (1) (Flask介绍、配置、Session、路由、请求和响应、Jinjia2模板语言、视图装饰器)

    oldboy:s9day114 参考博客:https://www.cnblogs.com/wupeiqi/articles/7552008.html 一.Flask简介 1.安装Flask pip i ...

  10. 高逼格利器之Python闭包与装饰器

    生活在魔都的小明,终于攒够了首付,在魔都郊区买了一套房子:有一天,小明踩了狗屎,中了一注彩票,得到了20w,小明很是欢喜,于是想干脆用这20万来装修房子吧(decoration): 整个装修过程,小明 ...

随机推荐

  1. 关于工作单元模式——工作单元模式与EF结合的使用

    工作单元模式往往和仓储模式一起使用,本篇文章讲到的是工作单元模式和仓储模式一起用来在ef外面包一层,其实EF本身就是工作单元模式和仓储模式使用的经典例子,其中DbContext就是工作单元,而每个Db ...

  2. K2 BPM_曾经我也是996的一员_全球领先的工作流引擎

    最近关于996的工作模式掀起了新一波讨论热潮.事情源于有人在知名代码托管平台GitHub上,发起了一个名为“996.ICU”的项目,意为“工作996,生病ICU”,以抵制互联网公司的996工作制,项目 ...

  3. Python 针对Excel操作

    1.python 读取Excel # -*- coding: utf-8 -*- import xlrd import os,sys reload(sys) sys.setdefaultencodin ...

  4. idea自动在文件头中添加作者和创建时间

    设置路径 : File -> Settings -> Editor -> File and Code Templates 定制头模板: /** * @Author: chancy * ...

  5. CDH5.16.1的agent启动报错:ERROR Error, CM server guid updated, expected d9bcadb4-f983-41b8-a667-66760f47bc91, received a67f5efa-8473-4f6a-94d6-231d1f432ef0

    1 详细错误 0/Oct/2019 14:56:13 +0000] 28577 MainThread agent ERROR Error, CM server guid updated, expect ...

  6. win10家庭版设置移动热点出现“我们无法设置移动热点”

    寝室wifi卡到爆炸,  买了一个360随身WiFi,可是360随身WiFi烧坏了  ...然后我就一个星期没玩游戏了 今天本来想开电脑的wifi试一试,结果发现无法设置热点 纳闷了 百度一下,发现都 ...

  7. 013.子查询和分页子查询(sql实例)

    --1 子查询 如果子查询和表连接都实现的时候,推荐用表连接实现( 一般:能用表连接实现的就用表连接,有些情况用表连接不能 或者不易实现的再选择子查询) 系统:缓存,执行计划技术手段 --1 wher ...

  8. macos下简单的socket服务器+客户端

    TCP客户端服务器编程模型: 服务器: 调用socket函数创建套接字 调用bind绑定本地IP和端口 调用listen启动监听(准备好接收客户端链接的队列) 调用accept从已连接队列中提取第一个 ...

  9. python批量下载邮件附件

    背景 由于同学每周要通过邮箱收数学建模作业,100多人给她发附件,她要一个个地点着下载. 太麻烦了,所以想用程序实现下载附件的功能. 在网上查资料后,最终实现了稍为简单的下载附件功能,代码有些细节还不 ...

  10. java8 stream两个集体交集、差集、并集操作

    业务场景: 页面左右两个datagrid,双击左边datagrid行,移动到右边datagrid,右边datagrid行双击,移动到左边datagrid 点击保存,提交修改的数据到后台 后台要把查询到 ...