1. 程式人生 > >flask中的藍圖與子域名實現

flask中的藍圖與子域名實現

靜態 文件 執行 .com 實例 固定 span inf 取出

內容:

1.flask中的藍圖

2.flask子域名實現

1.flask中的藍圖

一個大型項目中視圖比較多,如果僅僅是寫在app.py中不方便管理,藍圖就可以做到分功能分目錄結構

(1)什麽是藍圖

藍圖:用於實現單個應用的視圖、模板、靜態文件的集合。

藍圖就是模塊化處理的類

簡單來說,藍圖就是一個存儲操作路由映射方法的容器,主要用來實現客戶端請求和URL相互關聯的功能。 在Flask中,使用藍圖可以幫助我們實現模塊化應用的功能。

(2)藍圖的運行機制

藍圖是保存了一組將來可以在應用對象上執行的操作。

註冊路由就是一種操作,當在程序實例上調用route裝飾器註冊路由時,這個操作將修改對象的url_map路由映射列表。當我們在藍圖對象上調用route裝飾器註冊路由時,它只是在內部的一個延遲操作記錄列表defered_functions中添加了一個項。

當執行應用對象的 register_blueprint() 方法時,應用對象從藍圖對象的 defered_functions 列表中取出每一項,即調用應用對象的 add_url_rule() 方法,這將會修改程序實例的路由映射列表

(3)藍圖實際使用

2.flask子域名實現

(1)什麽是子域名

子域名類似xxx.douban.com的形式,比如book.douban.com、movie.douban.com、music.douban.com、time.douban.com

(2)flask子域名實現

 1 # __author__ = "wyb"
 2 # date: 2018/8/31
3 4 from flask import Flask 5 6 app = Flask(import_name=__name__) 7 app.config[SERVER_NAME] = wyb666.com:80 8 9 10 # 子域名 -> xxx.wyb666.com 11 # 靜態子域名 -> xxx是固定的 12 # subdomain指定子域名 13 @app.route("/", subdomain="admin") 14 def static_index(): 15 """ 16 Flask supports static subdomains
17 This is available at static.your-domain.tld 18 """ 19 return "static.your-domain.tld" 20 21 22 # 動態子域名 -> xxx不是固定的 23 # subdomain指定子域名(下面的<username>類似正則表達式) 24 @app.route("/dynamic", subdomain="<username>") 25 def username_index(username): 26 """ 27 Dynamic subdomains are also supported 28 Try going to username.your-domain.tld/dynamic 29 """ 30 return username + ".your-domain.tld" 31 32 33 if __name__ == __main__: 34 app.run()

(3)本地如何測試

上述程序運行後在瀏覽器中輸入admin.wyb666.com將出現如下畫面:

技術分享圖片

這是由於DNS解析的原因,DNS解析可以大致理解為訪問一個網站,輸入網址後將解析成IP地址訪問 (域名->IP地址

本地flask程序運行的IP是127.0.0.1,這裏並沒有對應關系,在Windows中可以通過修改host來實現添加或改變這個對應關系

在本地運行,本地訪問時要修改host文件,將上述的子域名與127.0.0.1對應:

1 127.0.0.1 www.wyb666.com
2 127.0.0.1 admin.wyb666.com
3 127.0.0.1 wyb.wyb666.com
4 、、、

然後運行程序再訪問就可以了:

技術分享圖片

flask中的藍圖與子域名實現