第七章 大型程序的結(jié)構(gòu)
7.1項目結(jié)構(gòu)
7.2配置選項
靜態(tài)方法和類方法的區(qū)別
靜態(tài)方法@staticmethod既不使用類哗蜈,也不使用實例作為參數(shù)。
類方法@classmethod使用類cls而不是實例self作為第一個參數(shù)邮绿。
而不加前兩個裝飾器則為實例方法葬燎,使用self實例作為第一個參數(shù)。
7.3程序包
7.4啟動腳本
7.5需求文件
7.6單元測試
在app/email.py
中清钥,
#...
from . import mail
from flask import current_app
# ...
app = current_app._get_current_object()
其中的.不但包括app中的所有模塊蚯根,
也包括init.py自身后众。
因為email.py已經(jīng)不在app/__init__.py
中,
所以需要使用Flask的上下文current_app來獲取實例颅拦。
還有一點需要注意的是蒂誉,
config雖然不在app的目錄下,
但是在app/__init__.py
中距帅,
通過``from config import config導(dǎo)入了右锨。
或者通過current_app.config來獲取配置。
7.7創(chuàng)建數(shù)據(jù)庫
7.8其他疑問
a.py如何導(dǎo)入b.py碌秸,
如果b.py所在目錄沒有__init__
绍移,
并且b.py和a.py的父目錄在同一目錄下悄窃?
使用.和..相對導(dǎo)入語法,
必須先定義父目錄包蹂窖。
為了讓python將文件夾當(dāng)作包轧抗,
它必須包含一個命名為__init__.py
的文件。
導(dǎo)入后瞬测,包中的類横媚、全局變量、函數(shù)都可以使用月趟。
app.config.from_object可以從目標(biāo)導(dǎo)入配置灯蝴。
在互相導(dǎo)入的兩個模塊中,
會造成循環(huán)導(dǎo)入孝宗,
這時應(yīng)該把其中一個導(dǎo)入語句放到最后穷躁,
或者放在較小模塊的函數(shù)中。