連著2天沒(méi)有記錄,身體不是太好
今天開(kāi)始繼續(xù)記錄
這本書(shū)的第七章留言板和第八章個(gè)人博客,我原以為這后面的內(nèi)容只是單純的利用前面所學(xué)的知識(shí)做一些項(xiàng)目
沒(méi)想到是一邊做項(xiàng)目一邊需要繼續(xù)學(xué)習(xí)新的一些內(nèi)容
這幾章內(nèi)容個(gè)人覺(jué)得編寫(xiě)的有些過(guò)于雜亂,讓人初讀難以理解,不過(guò)姑且還是先整理記錄一下
首先是第七章:留言板
這一章我覺(jué)得唯一的重點(diǎn)就只有“包組織對(duì)象”這一塊內(nèi)容
在前面的內(nèi)容中,所有的代碼都是全部放在一個(gè)模塊(py文件)之中去執(zhí)行的,當(dāng)項(xiàng)目簡(jiǎn)單的時(shí)候可以這樣做
當(dāng)項(xiàng)目變得復(fù)雜以后,可以選擇把模塊升級(jí)為包
Q:什么是模塊?什么是包?
在python中,每一個(gè)有效的python文件都是模塊,每一個(gè)包含__init__.py文件的文件夾都是包
__init__.py文件通常被稱(chēng)為構(gòu)造文件,文件可以為空,也可以用來(lái)放置包的初始化代碼
當(dāng)包或包內(nèi)的模塊被導(dǎo)入時(shí),構(gòu)造文件將會(huì)被自動(dòng)執(zhí)行
關(guān)于配置
之前的配置都是通過(guò)config來(lái)寫(xiě)入,使用包的時(shí)候可以把配置寫(xiě)到settings.py中
再單獨(dú)的文件中定義配置時(shí),不再使用config對(duì)象來(lái)添加配置,而是以鍵值對(duì)的形式寫(xiě)出
創(chuàng)建程序?qū)嵗?/p>
使用包組織代碼后,創(chuàng)建程序?qū)嵗⒊跏蓟卣沟炔僮骺梢栽跇?gòu)造文件中實(shí)現(xiàn)
__init__.py
app=Flask('sayhello')
app.config.from_profile('setting.py')
db=SQLALchemy(app)
from sayhello import views,errors,commands
在單腳本中創(chuàng)建程序?qū)嵗龝r(shí)我們傳__name__變量值
但是使用包組織代碼時(shí)最好以硬編碼的形式寫(xiě)出包名稱(chēng)作為程序名稱(chēng)
為了讓使用程序?qū)嵗齛pp的各種處理程序能和程序?qū)嵗P(guān)聯(lián)起來(lái),需要在文件末尾導(dǎo)入
之后還講了下生成虛擬數(shù)據(jù)的方法
fake=Faker('zh_CN')
第八章是個(gè)人博客
第一個(gè)是重點(diǎn)是藍(lán)本
比如把views.py轉(zhuǎn)換成blueprints子包,views.py的內(nèi)容被轉(zhuǎn)化成auth.py,blog.py,admin.py
實(shí)例化藍(lán)本類(lèi)
from flask import Blueprint
blog=Blueprint('blog',__name__)
第一個(gè)參數(shù)的藍(lán)本名稱(chēng)
Q:藍(lán)本的創(chuàng)建?
藍(lán)本一般在子包中創(chuàng)建,比如創(chuàng)建一個(gè)blog子包,然后在構(gòu)造文件中創(chuàng)建藍(lán)本實(shí)例
在簡(jiǎn)單的程序中也可以直接在模塊中創(chuàng)建藍(lán)本實(shí)例
在藍(lán)本對(duì)象的名稱(chēng)后可以添加一個(gè)_bp,更容易區(qū)分藍(lán)本對(duì)象
裝配藍(lán)本
@auth_bp.route('/login')
注冊(cè)藍(lán)本
app.regsiter_blueprint(auth_bp)
如果加一個(gè)url_prefix前綴,藍(lán)本下的視圖的url前都會(huì)加上前綴
藍(lán)本的路由端點(diǎn)
當(dāng)你在藍(lán)本中定義路由時(shí),端點(diǎn)的名稱(chēng)會(huì)由藍(lán)本名和視圖函數(shù)名組合而成
藍(lán)本的路由端點(diǎn)通過(guò)使用藍(lán)本名.視圖函數(shù)名的形式,有助于避免不同模塊之間的命名沖突,增強(qiáng)代碼的可讀性和組織性,使大型應(yīng)用的結(jié)構(gòu)更加清晰。
藍(lán)本資源
如果程序的不同藍(lán)本的頁(yè)面需要截然不同的樣式,可以把藍(lán)本定義為獨(dú)有的靜態(tài)文件和模板
這時(shí)需要把藍(lán)本模塊升級(jí)為包,在構(gòu)造文件中創(chuàng)建藍(lán)本實(shí)例
并在藍(lán)本包中創(chuàng)建static和templates文件夾
如果要使用藍(lán)本獨(dú)有的靜態(tài)文件,需要在定義藍(lán)本時(shí)使用static_folder關(guān)鍵字指定藍(lán)本的靜態(tài)文件文件夾路徑