十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂(yōu)售后,網(wǎng)站問(wèn)題一站解決
本篇內(nèi)容介紹了“python Django在開(kāi)發(fā)中如何使用”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),祿豐企業(yè)網(wǎng)站建設(shè),祿豐品牌網(wǎng)站建設(shè),網(wǎng)站定制,祿豐網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,祿豐網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
使用virtualenv隔離開(kāi)發(fā)環(huán)境
使用pip管理項(xiàng)目依賴(lài),主要就是一個(gè)小技巧,使用pipfreeze>requirements.txt來(lái)保存依賴(lài)的模塊和版本
使用gitignore.io這個(gè)網(wǎng)站提供的.gitignore文件管理代碼庫(kù)文件
打包和發(fā)布
項(xiàng)目的打包和發(fā)布用的Docker,Django項(xiàng)目的Dockerfile特別簡(jiǎn)單:
FROMpython:3.5
COPY./requirements.txt/src
WORKDIR/src
RUNpipinstall-rrequirements.txt
COPY./src
EXPOSE
CMDuwsgi--http:--wsgi-file
這一個(gè)Dockerfile模板可以通吃80%的Django項(xiàng)目了。
日志配置
既然用Docker,就放棄了把日志寫(xiě)入文件,直接寫(xiě)到標(biāo)準(zhǔn)輸出。
#settings.py
#...
LOGGING={
'version':1,
'disable_existing_loggers':False,
'formatters':{
'verbose':{
'format':'[application]%(levelname)s%(asctime)s%(module)s%(message)s'
}
},
'handlers':{
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
'stream':sys.stdout,
'formatter':'verbose'
},
},
'loggers':{
'app':{
'handlers':['console'],
'level':'DEBUG',
'propagate':True,
},
},
}
新版本的uwsgi已經(jīng)可以把webapp的日志收集起來(lái)輸出到標(biāo)準(zhǔn)輸出里面了。如果需要收集、管理日志的話(huà),就是用Docker日志收集工具,直接收集Docker容器的日志即可。
自動(dòng)化測(cè)試
既然是純后端項(xiàng)目,工程師完全可以通過(guò)自動(dòng)化測(cè)試來(lái)檢測(cè)自己的代碼。Django本身對(duì)測(cè)試提供了很好的支持,可以通過(guò)sqlite來(lái)搭建測(cè)試數(shù)據(jù)庫(kù),還有基于內(nèi)存的緩存,做測(cè)試不會(huì)增加對(duì)其他系統(tǒng)的依賴(lài)。開(kāi)發(fā)起來(lái)事半功倍。
除了要寫(xiě)自動(dòng)化測(cè)試代碼,還要能統(tǒng)計(jì)測(cè)試覆蓋率。目前我們用的是coverage.py這個(gè)工具,說(shuō)實(shí)話(huà)沒(méi)有node.js的istanbul好用,輸出的報(bào)告沒(méi)有Istanbul詳細(xì)和易讀。不過(guò)用來(lái)檢查“死代碼”還是夠用的。
針對(duì)http代碼的測(cè)試
有些項(xiàng)目需要對(duì)接的第三方系統(tǒng)比較多,比如微信認(rèn)證、支付、短信等常見(jiàn)的,可能還有其他一些垂直業(yè)務(wù)領(lǐng)域的系統(tǒng)。這部分接口對(duì)接的代碼,也應(yīng)該納入到測(cè)試當(dāng)中,畢竟Python作為腳本語(yǔ)言,代碼很容易出現(xiàn)錯(cuò)誤。
這塊一般是用responses這個(gè)模塊來(lái)mockhttp請(qǐng)求。
定時(shí)任務(wù)
有一些Django項(xiàng)目需要做一些定時(shí)任務(wù)。首先,絕對(duì)不用linux內(nèi)置的crontab。主要的問(wèn)題還是維護(hù)的成本高,沒(méi)準(zhǔn)哪天就把這個(gè)配置給忘了。
我們現(xiàn)在方式都是借助DjangoCommand的功能,將定時(shí)任務(wù)封裝成一個(gè)command。在這個(gè)command里面運(yùn)行一個(gè)scheduler。就像下面這樣:
importschedule
fromdjango.core.management.baseimportBaseCommand
classCommand(BaseCommand):
defhandle(self,*args,**kwargs):
schedule.every(45).minutes.do(do_this)
schedule.every().day.at('04:00').do(do_that)
whileTrue:
schedule.run_pending()
time.sleep(1)
“python Django在開(kāi)發(fā)中如何使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!