##Flask 學習小組
###**Flask項目結構**

> 看完網上的這張圖大家可能并不明白各個Python文件的聯系,接下來就為大家逐一介紹。
* **_____init_____.py**
> 控制著包的導入行為,__init__.py 文件會在導入時被執行。
import 方便了我們導入其他 Python 文件中的函數,但一個一個的導入 Python 文件是很復雜的,我們就引入了包的概念,可以批量的導入包中的多個Python文件。那么如何定義包呢,這就是 __init__.py 的用途。同時,當我們導入包時也會執行 __init__.py 的內容。
在 import 導入的過程中,import * 導入了包中的所有元素。其原因就在與 __init__.py 中,定義了 __all__=「‘module1’,‘module2’」,* 導入包時,是受 __init__.py 的限制,只會導入 __all__ 中定義的包。
* **工廠函數**
> 構造程序,但不進行實例化的函數
* **藍本**
> 處于休眠狀態的程序
* **migrations**
> Flask中的擴展 Flask-Migrate 可以實現數據庫的遷移
數據庫為什么要遷移?
當數據模型發生變動時,數據庫表需要更新,Flask-SQLAlchemy 比較死性,只有數據庫表不存在時才會根據模型創建。
所以我們要像重新根據模型創建表,只能刪除舊表重新創建,但問題是這樣會導致原有表中數據丟失。
所以要使用Flask-Migrate進行表的更新。
* **requirements.txt**
包含所有flask依賴包,方便重新創建與開發者相同的虛擬環境
requirements的生成:
(venv)$ pip freeze >requirements.txt
依照requirements 安裝所有依賴包:
在新創建的虛擬環境中:
(venv) $ pip install -r requirements.txt
* **_____name_____ 和 _____main_____**
_____name_____:
> Modules…
Predefined (writable) attributes: __name__ is the module’s name;
Classes…
Special attributes: __name__ is the class name;
如果是放在Modules模塊中,就表示是模塊的名字;
如果是放在Classs類中,就表示類的名字;
_____main_____:
Python 自己運行自己的代碼時:__name__=__main__
我們通過import導入模塊時:__name__=使用該模塊的xxx.py文件
實驗:
**a.py:**

**b.py:**

**結果:**

##**最后放大招(全網最全梳理圖)**

* * * * *
本人微信:sunyutong0725
歡迎交流