Flask 的 请求扩展 与 中间件
Flask 的 请求扩展 与 中间件
flask 可以通过 扩展(装饰器)来实现类似于django 中间件的功能
类似于django 的中间件, 在执行视图函数之前, 之后的执行某些功能
1 @app.before_first_request
执行一次,第一次请求结束,在第一批函数执行后 就不再执行(状态改为False)
@app.before_first_request
def before_first_request1():
print('before_first_request1')
2 @app.before_request: process_request
在视图函数执行前,按照顺序依次执行(列表顺序)
@app.before_request
def before_request1():
Request.nnn = 123
print('before_request1')
@app.before_request
def before_request2():
print('before_request2')
登录验证:
@user.before_request
def check(*args,**kwargs):
if request.path == '/login':
return None
elif session.get('user_info'):
return None
else:
return redirect('/login')
3 @app.after_request: process_response
在视图函数执行后,按照反序依次执行(列表逆序)
@app.after_request
def after_request1(response):
print('before_request1', response)
return response
@app.after_request
def after_request2(response):
print('before_request2', response)
return response
注意:请求被 before_request 拦截后,所有的 response会执行
另外:扩展可以只对 单独的蓝图对象生效,也可以对全局的 app 都生效
4 @app.errorhandler(404) 定制错误信息
@app.errorhandler(404)
def page_not_found(error):
return render_template('404.html'),404
5 定制模板方法 @app.template_global()装饰器 @app.template_filter()装饰器
@app.template_global()装饰器
def func(a,b,c) --->> 全局temlate使用 {{func(a,b,c)}}
和 @app.template_filter()装饰器
def func(a,b,c) --->> 全局temlate使用 {{a|filter(b,c)}} # 需要管道符
6 根据flask的请求入口,实现类似中间件的操作
class Middleware(object):
def __int__(self,old_wsgi_app):
self.old_wsgi_app = old_wsgi_app
def __call__(self, environ, start_response):
print('before')
ret = self.old_wsgi_app(environ, start_response)
print('after')
return ret
if __name__ == '__main__':
app.wsgi_app = Middleware(app.wsgi_app)
app.run()
Flask 的 请求扩展 与 中间件的更多相关文章
- 第二篇 Flask基础篇之(闪现,蓝图,请求扩展,中间件)
本篇主要内容: 闪现 请求扩展 中间件 蓝图 写装饰器,常用 functools模块,帮助设置函数的元信息 import functools def wrapper(func): @functools ...
- Flask框架(三)—— 请求扩展、中间件、蓝图、session源码分析
Flask框架(三)—— 请求扩展.中间件.蓝图.session源码分析 目录 请求扩展.中间件.蓝图.session源码分析 一.请求扩展 1.before_request 2.after_requ ...
- flask框架(六)——闪现(get_flashed_message)、请求扩展、中间件(了解)
message -设置:flash('aaa') -取值:get_flashed_message() -假设在a页面操作出错,跳转到b页面,在b页面显示a页面的错误信息 1 如果要用flash就必须设 ...
- Flask的请求扩展
from flask import Flask,request app = Flask(__name__) 一.请求前 before_request 用法 @app.before_request de ...
- flask之请求与响应、闪现(阅后即焚)、请求扩展(before,after)、中间件、LOCAL对象、偏函数、
目录 1.flask请求与响应 2.闪现 3.请求扩展 4.中间件 5.LOCAL对象 6.偏函数 templates 1.flask请求与响应 from flask import Flask,req ...
- Flask请求扩展和数据库连接池
1.1.Flask之请求扩展 #!/usr/bin/env python # -*- coding:utf-8 -*- from flask import Flask, Request, render ...
- Flask的闪现(message) 请求扩展 中间件 蓝图
补充:一个编程思路 需求:做一些邮件短信微信的消息通知,比如账单告警之类的:比如数据库操作,数据库种类繁多:缓存的选择比如redis/memcache,诸如此类需要进行选择配置,如果我们单纯的用函数去 ...
- Flask - 请求响应 | session | 闪现 | 请求扩展 | 中间件
请求响应 flask的请求信息都在request里 flask的响应方式有四剑客,也可以自定义响应 请求相关信息 # request.method 提交的方法 # request.args get请求 ...
- flask框架(九): 请求和响应扩展以及中间件
一:请求响应扩展 # 每一次访问都执行 # 注意请求之前按照顺序执行 # 请求之后按照书写顺序倒序执行 # 请求之前执行 @app.before_request def process_request ...
随机推荐
- mysql的两种常用的引擎
MyISAM引擎特点1.不支持事务(事务是指逻辑上的一组操作,组成这组操作的各个单元,要么全成功,要么全失败)2.表级锁定(数据更新时锁整个表):其锁定机制是表级锁定,这虽然可以让锁定的实现成本很小但 ...
- iptables打开22,80,8080,3306等端口
systemctl stop firewalld systemctl mask firewalld Then, install the iptables-services package: yum i ...
- 高通平台下安卓opencl小例子
http://blog.csdn.net/wcj0626/article/details/26272019 先到高通的qdn下载adreno GPU SDK,里面有OpenCL的例子.https:// ...
- HTML5/CSS3实现图片倒影效果
在线演示 本地下载
- JavaWeb HTTP
1. Http协议 1.1. 什么是Http协议 Http的全称为HyperText Transfer Protocol,译为超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通 ...
- 无网络环境用pip安装python类包
1.现在有网络的电脑安装相应的包 pip install django 2.安装完成后 打包 1)新建一个文件夹(package),用来存放包: 2)执行 pip list #查看安装的包 pip f ...
- Linux系统故障-Repair filesystem
fsck /dev/hddn (代表根目录所在的区) fsck -A -y 重启系统可以进去了:- ) fsck命令的主要选项如下: -A 检查所有列在etc/fstab文件中的文件系统.带有这个选项 ...
- git代码提交与克隆
在工作中,越来越多的人会使用git来管理代码.下面简单的介绍一下git在工作中的使用流程 1.给你一个git地址,将代码拉下来基本操作流程如下: 1.1 git clone "项目地址&qu ...
- 最简单的CI框架入门示例--数据库取数据
前提: 安装好MySQL,Apache,PHP. 1.下载CI框架 下载地址 http://www.codeigniter.com/ 2.配置 database.php配置: 为数据库服务器设 ...
- XML基本知识点——思维导图
如图 思维导图图片链接 http://www.edrawsoft.cn/viewer/public/s/5dcd3224563939 有道云笔记图片链接 http://note.youdao.com/ ...