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()

原文地址:https://www.cnblogs.com/ExMan/p/9870708.html

时间: 2024-08-30 04:17:02

Flask 的 请求扩展 与 中间件的相关文章

第二篇 Flask基础篇之(闪现,蓝图,请求扩展,中间件)

本篇主要内容: 闪现 请求扩展 中间件 蓝图 写装饰器,常用 functools模块,帮助设置函数的元信息 import functools def wrapper(func): @functools.wraps(func) def inner(*args,**kwargs): return func(*args,**kwargs) return inner @wrapper def f1(): pass print(f1.__name__) # f1 续接第一篇 8.Flask之闪现 # 首先

Flask 请求扩展

Flask 请求扩展 from flask import Flask,request app = Flask(__name__) before_request # 用before_request装饰的函数是执行响应函数之前执行, # 如果有多个before_request他会自上而下按照顺序执行 # 如果before_request有返回值,那后面的before_request都不会执行,且响应函数也不会执行 # 其有没有返回值都不会影响after_request的执行 @app.before_

请求扩展以及错误处理

目录 请求扩展 请求扩展之 错误处理 以及 标签与过滤器 中间件(了解知识点) 请求扩展 Flask 里面的请求扩展相当于 Django 的中间件 before_first_request 当项目启动后,接收到的第一个请求,就会执行 before_first_request 装饰的函数,执行顺序也是谁先注册就谁先执行 before_request 请求没有经过响应函数的时候,会执行 before_request 装饰的函数,谁先注册谁先执行.只要有一个函数有返回值,后面的所有before_req

自动化运维Python系列之Django CSRF跨站请求伪造、中间件

CSRF CSRF,跨站请求伪造是一种挟持用户在当前已登陆的web站点应用程序上执行非本意的操作攻击方法,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品). Django的CSRF中间件验证就可以有效地杜绝此类恶意攻击,原理就是Django在内部会对通过验证请求的客户端再做一次加密验证,该加密方式只有Django自己知道,客户端即使携带session反解密CSRF不成功也会拒绝访问:这是Django生

django中跨站请求伪造与中间件

跨站请求伪造的作用: 跨站请求伪造是为了防止非法post数据 浏览器第一次访问服务端,服务端会分配一个token 如果浏览器要post数据到服务端,需要带上服务端分配的token 该token存放在客户端cookie中 跨站请求伪造可以绕过 请注意通过form和ajax提交数据,他们是怎么带上token的 绕站跨站请求伪造的方法: 在settings.py中注释掉'django.middleware.csrf.CsrfViewMiddleware',如下: MIDDLEWARE_CLASSES

body-parser Node.js(Express) HTTP请求体解析中间件

body-parser Node.js(Express) HTTP请求体解析中间件 2016年06月08日     781     声明 在HTTP请求中,POST.PUT和PATCH三种请求方法中包含请求体,Node.js 原生HTTP模块中,请求体要基于流的方式接收和解析.body-parser是一个HTTP请求体解析中间件,使用这个模块可以解析JSON.Raw.文本.URL-encoded格式的请求体,Express框架中就是使用这个模块做为请求体解析中间件. 请求体解析 1.1 原生环境

Flask关于请求表单的粗浅应用及理解+简单SQL语句温习

1.请求表单 请求表单的知识点是flask数据请求中很小的一部分,首先要了解一下GET和POST请求:http://www.w3school.com.cn/tags/html_ref_httpmethods.asp GET和POST从字面意义上理解,一个是"获取"一个是"发送" 说白了GET就是从指定的资源处来请求获取数据: 而POST就是向指定的资源来提交要被处理的数据: 而我们的请求表单,也就是request.form[],就是来获取POST请求中提交的表单数据

Flask的请求上下文机制

准备知识 面向对象双下方法 __call__ 对象后面加括号,触发执行 为什么设计上下文这样的机制? 就是保证多线程环境下,实现线程之间的隔离. 在了解flask上下文机制之前,我们先了解下线程的数据安全. 线程安全 如上代码段,在1s内开启20个线程,执行add_num(),结果foo.num都为 19,说明线程间数据是不隔离的. 那么,如何保证线程间数据隔离呢? 有一种 threading.local 方法 Thread Local threading.local 在多线程操作时,为每一个线

Flask框架 请求与响应 & 模板语法

目录 Flask框架 请求与响应 & 模板语法 简单了解Flask框架 Flask 框架 与 Django 框架对比 简单使用Flask提供服务 Flask 中的 Response(响应) Flask 中的 Request(请求) Flask 模板语言简单使用 Flask框架参考手册 原文地址:https://www.cnblogs.com/guokaifeng/p/11587311.html