封面 Flask Web 的項目結構

封面 Flask Web 的項目結構

一個腳本中寫一個Web程序是不可取的,當項目變大時,會產生很多問題。雖然Flask項目沒有固定的組織形式,不過,根據前人的經驗,一般的項目建議取用如下的結構(如博客建站),當然如果自己很熟練的習慣或者有更好的方式,可以使用自己的習慣。

|-flasky

|-app/

|-templates/

|-static/

|-main/

|-__init__.py

|-errors.py

|-forms.py

|-views.py

|-__init__.py

|-email.py

|-models.py

|-migrations/

|-tests

|-__init__.py

|-test*.py

|-venv/

|-requirements.txt

|-config.py

|-manage.py

封面 Flask Web 的項目結構

這種結構有4個頂級文件夾,Flask程序保存在名為app的包中,migrations文件夾數據庫遷移腳本,單元測試寫在tests包中,venv是python運行的虛擬環境。另外requirements.txt列出的是本虛擬環境所需要的包,方便在其他地方部署同樣的環境,config.py是配置文件信息,manage.py是負責啟動程序以及其他程序任務。

配置文件中,建議使用層次結構的配置類,而不是簡單的字典狀結構,而且,配置信息建議區分開發,測試和生產環境,各自使用不同的數據庫,這樣彼此不會干擾。這時通常會用到類繼承,基類config包含通用配置,繼承類分別定義專用配置。配置類可以定義init_app()類方法,參數是程序實列。敏感信息保存在環境變量,這樣的配置靈活且安全。

這裡補充說一下程序包,所謂程序包就是保存程序所有代碼,模板,靜態文件的文件夾,我們通常會稱這個包為app(應用)。

封面 Flask Web 的項目結構

單個文件開發程序雖然方便,但是缺點很明顯,因為程序在全局作用域中創建,所以無法動態修改配置,運行腳本時,程序實例已經創建,再想修改配置就不可能了。這一點對於單元測試尤為重要。這個問題的解決方法就是延遲創建程序實例,把創建過程移到可顯式調用的工廠函數中。這樣不僅可以給腳本留出配置程序的時間,還能夠創建多個程序實例。這麼有用的工廠函數在app包的構造文件中定義。

關於工廠函數的定義以及使用藍本等內容,明天再繼續。敬請期待。


分享到:


相關文章: