码迷,mamicode.com
首页 > 其他好文 > 详细

Flask——中间件,蓝图

时间:2020-09-07 18:52:05      阅读:45      评论:0      收藏:0      [点我收藏+]

标签:__name__   导入   对象   替换   同文件   run   __call   中间   int   

中间件(跟django中间件完全不一样)

from flask import Flask
app = Flask(__name__)
@app.route(‘/‘)
def index():
    return ‘Hello World!‘
# 模拟中间件
class Md(object):
    def __init__(self,old_wsgi_app):
        self.old_wsgi_app = old_wsgi_app

    def __call__(self,  environ, start_response):
        print(‘开始之前‘)
        ret = self.old_wsgi_app(environ, start_response)
        print(‘结束之后‘)
        return ret

if __name__ == ‘__main__‘:
    #1我们发现当执行app.run方法的时候,最终执行run_simple,最后执行app(),也就是在执行app.__call__方法	
    #2 在__call__里面,执行的是self.wsgi_app().那我们希望在执行他本身的wsgi之前做点事情。
    #3 所以我们先用Md类中__init__,保存之前的wsgi,然后我们用将app.wsgi转化成Md的对象。
    #4 那执行新的的app.wsgi_app,就是执行Md的__call__方法。
    #把原来的wsgi_app替换为自定义的,
    
    app.wsgi_app = Md(app.wsgi_app)
    app.run()

蓝图(blueprint)

1 没有蓝图之前前,都是单文件
2 有了蓝图可以分文件,分app,之前的请求扩展还是一样用,只是在当前蓝图对象管理下的有效
3 蓝图使用
	#第一步在app中注册蓝图,括号里是一个蓝图对象
    app.register_blueprint(user.us)
	# 第二步,在不同文件中注册路由时,直接使用蓝图对象注册,不用使用app了,避免了循环导入的问题
    @account.route(‘/login.html‘, methods=[‘GET‘, "POST"])
4 中小型项目目录划分
	项目名字
    	-pro_flask文件夹
        -__init__.py
    	-templates
        	-login.html
        -statics
        	-code.png
        -views
        	-blog.py
        	-account.py
        	-user.py
        -run.py
        
5 大型项目
    项目名
    	-pro_flask文件夹
        	-__init__.py
            -web
            	-__init__.py
            	-static
                -views.py
                -templates
    		-admin
                -templates
                -static
                -views.py
                -__init__.py
        -run.py
 

Flask——中间件,蓝图

标签:__name__   导入   对象   替换   同文件   run   __call   中间   int   

原文地址:https://www.cnblogs.com/pythonwl/p/13573360.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!