
參考文獻(xiàn)
https://docs.djangoproject.com/zh-hans/2.2/intro/tutorial01/
近期打算基于django最新版本寫一套監(jiān)控類管理系統(tǒng),以該項(xiàng)目為例,講解django如何創(chuàng)建項(xiàng)目。
在監(jiān)控類管理系統(tǒng),對(duì)于運(yùn)維開發(fā)這塊必定存在很多功能模塊,例如 資產(chǎn)管理、中間件監(jiān)控(memcached、redis等),還有ansible遠(yuǎn)程調(diào)用批量處理模塊等等。
這么多的模塊應(yīng)該怎么拆分去寫呢?
在django中,項(xiàng)目的組織結(jié)構(gòu)為一個(gè)項(xiàng)目包含多個(gè)應(yīng)用,一個(gè)應(yīng)用對(duì)應(yīng)一個(gè)業(yè)務(wù)模塊。也就是說(shuō),上面說(shuō)的那么多個(gè)功能模塊,可以分開多個(gè)應(yīng)用去逐個(gè)編寫,逐個(gè)擊破。
安裝Django 2.1.7
pip3 install django==2.1.7
示例
創(chuàng)建項(xiàng)目的名稱為mysite,完成"資產(chǎn)-中間件"信息的維護(hù),創(chuàng)建應(yīng)用名稱為assetinfo。
創(chuàng)建項(xiàng)目
django-admin startproject 項(xiàng)目名稱
$ django-admin startproject mysite
$ ls mysite/
manage.py* mysite/
可以看到已經(jīng)創(chuàng)建好了mysite項(xiàng)目目錄。使用pycharm打開項(xiàng)目。

可以看到項(xiàng)目已經(jīng)自動(dòng)創(chuàng)建了不少目錄了,其中里面存在了一個(gè)mysite的文件夾。
這些目錄和文件的用處是:
- 最外層的
mysite/根目錄只是你項(xiàng)目的容器, Django 不關(guān)心它的名字,你可以將它重命名為任何你喜歡的名字。 -
manage.py: 一個(gè)讓你用各種方式管理 Django 項(xiàng)目的命令行工具。你可以閱讀 django-admin and manage.py 獲取所有manage.py的細(xì)節(jié)。 - 里面一層的
mysite/目錄包含你的項(xiàng)目,它是一個(gè)純 Python 包。它的名字就是當(dāng)你引用它內(nèi)部任何東西時(shí)需要用到的 Python 包名。 (比如mysite.urls). -
mysite/__init__.py:一個(gè)空文件,告訴 Python 這個(gè)目錄應(yīng)該被認(rèn)為是一個(gè) Python 包。如果你是 Python 初學(xué)者,閱讀官方文檔中的 更多關(guān)于包的知識(shí)。 -
mysite/settings.py:Django 項(xiàng)目的配置文件。如果你想知道這個(gè)文件是如何工作的,請(qǐng)查看 Django settings 了解細(xì)節(jié)。 -
mysite/urls.py:Django 項(xiàng)目的 URL 聲明,就像你網(wǎng)站的“目錄”。閱讀 URL調(diào)度器 文檔來(lái)獲取更多關(guān)于 URL 的內(nèi)容。 -
mysite/wsgi.py:作為你的項(xiàng)目的運(yùn)行在 WSGI 兼容的Web服務(wù)器上的入口。閱讀 如何使用 WSGI 進(jìn)行部署 了解更多細(xì)節(jié)。
用于開發(fā)的簡(jiǎn)易服務(wù)器?
讓我們來(lái)確認(rèn)一下你的 Django 項(xiàng)目是否真的創(chuàng)建成功了。如果你的當(dāng)前目錄不是外層的 mysite 目錄的話,請(qǐng)切換到此目錄,然后運(yùn)行下面的命令:
$ python3 manage.py runserver
在這里如果不對(duì)urls.py進(jìn)行修改,直接啟動(dòng)就會(huì)報(bào)錯(cuò)。錯(cuò)誤參見(jiàn)Django 2.1.7 runserver啟動(dòng)直接報(bào)錯(cuò).
首先需要修改urls.py文件代碼如下:
from django.contrib import admin
from django.urls import include, path # 增加導(dǎo)入include方法
urlpatterns = [
path('admin/', admin.site.urls),
]
然后再次啟動(dòng)開發(fā)服務(wù),如下:

創(chuàng)建應(yīng)用
使用一個(gè)應(yīng)用開發(fā)一個(gè)業(yè)務(wù)模塊,此處創(chuàng)建應(yīng)用名稱為assetinfo,完成資產(chǎn)-中間件的信息維護(hù)。
創(chuàng)建應(yīng)用的命令如下:
python3 manage.py startapp assetinfo

可以看到,執(zhí)行命令之后,就創(chuàng)建了一個(gè)應(yīng)用名的文件夾,并自動(dòng)生成了相關(guān)文件,下面對(duì)文件說(shuō)明如下:
-
_init.py_是一個(gè)空文件,表示當(dāng)前目錄assetinfo可以當(dāng)作一個(gè)python包使用。 -
tests.py文件用于開發(fā)測(cè)試用例,在實(shí)際開發(fā)中會(huì)有專門的測(cè)試人員,這個(gè)事情不需要我們來(lái)做。 -
models.py文件跟數(shù)據(jù)庫(kù)操作相關(guān)。 -
views.py文件跟接收瀏覽器請(qǐng)求,進(jìn)行處理,返回頁(yè)面相關(guān)。 -
admin.py文件跟網(wǎng)站的后臺(tái)管理相關(guān)。 -
migrations文件夾之后給大家介紹。
編寫第一個(gè)視圖
讓我們開始編寫第一個(gè)視圖吧。打開 assetinfo/views.py,把下面這些 Python 代碼輸入進(jìn)去:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the assetinfo index.")

這是 Django 中最簡(jiǎn)單的視圖。如果想看見(jiàn)效果,我們需要將一個(gè) URL 映射到它——這就是我們需要 URLconf 的原因了。
為了創(chuàng)建 URLconf,請(qǐng)?jiān)?assetinfo 目錄里新建一個(gè) urls.py 文件。你的應(yīng)用目錄現(xiàn)在看起來(lái)應(yīng)該是這樣:

在 assetinfo /urls.py 中,輸入如下代碼:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]

下一步是要在根 URLconf 文件中指定我們創(chuàng)建的 assetinfo.urls 模塊。在 test1/urls.py 文件的 urlpatterns 列表里插入一個(gè) include(), 如下:
from django.contrib import admin
from django.urls import include, path # 增加導(dǎo)入include方法
urlpatterns = [
path('assetinfo/', include('assetinfo.urls')), # 導(dǎo)入assetinfo應(yīng)用的urls.py
path('admin/', admin.site.urls),
]

函數(shù) include() 允許引用其它 URLconfs。每當(dāng) Django 遇到 :func:<cite>~django.urls.include</cite> 時(shí),它會(huì)截?cái)嗯c此項(xiàng)匹配的 URL 的部分,并將剩余的字符串發(fā)送到 URLconf 以供進(jìn)一步處理。
設(shè)計(jì) include() 的理念是使其可以即插即用。因?yàn)閼?yīng)用有它自己的 URLconf( assetinfo/urls.py ),他們能夠被放在 "/assetinfo/" , "/fun_assetinfo/" ,"/content/assetinfo/",或者其他任何路徑下,這個(gè)應(yīng)用都能夠正常工作。
現(xiàn)在把 index 視圖添加進(jìn)了 URLconf。可以驗(yàn)證是否正常工作,運(yùn)行下面的命令:
python3 manage.py runserver
用你的瀏覽器訪問(wèn) http://localhost:8000/assetinfo/,你應(yīng)該能夠看見(jiàn) "Hello, world. You're at the polls index." ,這是你在 index 視圖中定義的。

啟動(dòng)開發(fā)web服務(wù)
在開發(fā)階段,為了能夠快速預(yù)覽到開發(fā)的效果,django提供了一個(gè)純python編寫的輕量級(jí)web服務(wù)器,僅在開發(fā)階段使用。
運(yùn)行服務(wù)器命令如下:
python3 manage.py runserver ip:port
例:
python3 manage.py runserver
可以不寫IP和端口,默認(rèn)IP是127.0.0.1,默認(rèn)端口為8000。