1. 程式人生 > 實用技巧 >Flask——中介軟體,藍圖

Flask——中介軟體,藍圖

中介軟體(跟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