明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

總結(jié)python Django在開發(fā)中的使用經(jīng)驗(yàn)

[摘要]這次給大家?guī)砜偨Y(jié)python Django在開發(fā)中的使用經(jīng)驗(yàn),在python Django在開發(fā)中的注意事項(xiàng)有哪些,下面就是實(shí)戰(zhàn)案例,一起來看一下。大三的時(shí)候第一次接觸 Django,從真正使用 Django 做項(xiàng)目到現(xiàn)在也快 4 年了。最喜歡的其實(shí)還是 Django 的 ORM 框架。公司的項(xiàng)...
這次給大家?guī)砜偨Y(jié)python Django在開發(fā)中的使用經(jīng)驗(yàn),在python Django在開發(fā)中的注意事項(xiàng)有哪些,下面就是實(shí)戰(zhàn)案例,一起來看一下。

大三的時(shí)候第一次接觸 Django,從真正使用 Django 做項(xiàng)目到現(xiàn)在也快 4 年了。最喜歡的其實(shí)還是 Django 的 ORM 框架。公司的項(xiàng)目都是前后分離的,使用 Django 做后端接口開發(fā)還是很高效的。


特此總結(jié)一些 Django 開發(fā)的小經(jīng)驗(yàn)。先說一些最最基礎(chǔ)的吧。

使用 virtualenv 隔離開發(fā)環(huán)境

使用 pip 管理項(xiàng)目依賴,主要就是一個(gè)小技巧,使用 pip freeze > requirements.txt 來保存依賴的模塊和版本

使用 gitignore.io 這個(gè)網(wǎng)站提供的 .gitignore 文件管理代碼庫(kù)文件

打包和發(fā)布

項(xiàng)目的打包和發(fā)布用的 Docker,Django 項(xiàng)目的 Dockerfile 特別簡(jiǎn)單:

FROM python:3.5
COPY ./requirements.txt /src
WORKDIR /src
RUN pip install -r requirements.txt
COPY . /src
EXPOSE
CMD uwsgi --http :--wsgi-file<path/to/wsgi.py>

這一個(gè) Dockerfile 模板可以通吃 80% 的 Django 項(xiàng)目了。

日志配置

既然用 Docker,就放棄了把日志寫入文件,直接寫到標(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 的日志收集起來輸出到標(biāo)準(zhǔn)輸出里面了。如果需要收集、管理日志的話,就是用 Docker 日志收集工具,直接收集 Docker 容器的日志即可。

自動(dòng)化測(cè)試

既然是純后端項(xiàng)目,工程師完全可以通過自動(dòng)化測(cè)試來檢測(cè)自己的代碼。Django 本身對(duì)測(cè)試提供了很好的支持,可以通過 sqlite 來搭建測(cè)試數(shù)據(jù)庫(kù),還有基于內(nèi)存的緩存,做測(cè)試不會(huì)增加對(duì)其他系統(tǒng)的依賴。開發(fā)起來事半功倍。

除了要寫自動(dòng)化測(cè)試代碼,還要能統(tǒng)計(jì)測(cè)試覆蓋率。目前我們用的是 coverage.py 這個(gè)工具,說實(shí)話沒有 node.js 的 istanbul 好用,輸出的報(bào)告沒有 Istanbul 詳細(xì)和易讀。不過用來檢查 “死代碼” 還是夠用的。

針對(duì) http 代碼的測(cè)試

有些項(xiàng)目需要對(duì)接的第三方系統(tǒng)比較多,比如微信認(rèn)證、支付、短信等常見的,可能還有其他一些垂直業(yè)務(wù)領(lǐng)域的系統(tǒng)。這部分接口對(duì)接的代碼,也應(yīng)該納入到測(cè)試當(dāng)中,畢竟 Python 作為腳本語(yǔ)言,代碼很容易出現(xiàn)錯(cuò)誤。

這塊一般是用 responses 這個(gè)模塊來 mock http 請(qǐng)求。

定時(shí)任務(wù)

有一些 Django 項(xiàng)目需要做一些定時(shí)任務(wù)。首先,絕對(duì)不用 linux 內(nèi)置的 crontab。主要的問題還是維護(hù)的成本高,沒準(zhǔn)哪天就把這個(gè)配置給忘了。

我們現(xiàn)在方式都是借助 Django Command 的功能,將定時(shí)任務(wù)封裝成一個(gè) command。在這個(gè) command 里面運(yùn)行一個(gè) scheduler。就像下面這樣:

import schedule
from django.core.management.base import BaseCommand
class Command(BaseCommand):
    def handle(self, *args, **kwargs):
        schedule.every(45).minutes.do(do_this)
        schedule.every().day.at('04:00').do(do_that)
        while True:
            schedule.run_pending()
            time.sleep(1)

如果對(duì)于這塊有任何不懂的問題可以隨時(shí)來問我,我對(duì)于學(xué)習(xí)方法,系統(tǒng)學(xué)習(xí)規(guī)劃,還有學(xué)習(xí)效率這些曾經(jīng)研究的很深,希望可以幫助大家少走彎路。Python新手交流群 前三位:四六三 ,中間三位:零二四,最后三位是:零九一

相信看了這些案例你已經(jīng)掌握了方法,更多精彩請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!

相關(guān)閱讀:

vue的css動(dòng)畫

image與view標(biāo)簽上下有空隙的解決方法

為什么slot都是用在子組件

如何利用getBoundingClientRect()來實(shí)現(xiàn)div容器滾動(dòng)固定

以上就是總結(jié)python Django在開發(fā)中的使用經(jīng)驗(yàn)的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!


網(wǎng)站建設(shè)是一個(gè)廣義的術(shù)語(yǔ),涵蓋了許多不同的技能和學(xué)科中所使用的生產(chǎn)和維護(hù)的網(wǎng)站。