(一)django新建project和app、編寫檢視
下面學習過程中的虛擬機器地址:172.16.92.30
1、安裝
(儘量使用持續支援的版本https://www.djangoproject.com/download/) pip install django==1.11.16
2、建立project專案
[[email protected] test]# django-admin startproject mysite
[[email protected] test]# cd mysite/
[[email protected] mysite]# ls
manage.py mysite
[[email protected] mysite]# python manage.py runserver 0.0.0.0:8000
#Django將執行在8000埠,整個區域網內都將可以訪問站點,而不只是是本機
瀏覽器訪問http://172.16.92.30:8000報錯:
Invalid HTTP_HOST header: '172.16.92.30:8000'. You may need to add u'172.16.92.30' to ALLOWED_HOSTS.
#更改settings.py允許所有主機訪問
ALLOWED_HOSTS = ['*']
再次訪問顯示It worked!則正常。
3、project專案的目錄說明
mysite/ manage.py mysite/ __init__.py settings.py urls.py wsgi.py
- 外層的
mysite/
目錄與Django無關,只是你專案的容器,可以任意命名。 -manage.py
:一個命令列工具,用於與Django進行不同方式的互動指令碼,非常重要! - 內層的
mysite/
目錄是真正的專案檔案包裹目錄,它的名字是你引用內部檔案的包名,例如:mysite.urls。 mysite/__init__.py
:一個定義包的空檔案。mysite/settings.py
:專案的主配置檔案,非常重要!mysite/urls.py
:路由檔案,所有的任務都是從這裡開始分配,相當於Django驅動站點的內容表格,非常重要!mysite/wsgi.py
:一個基於WSGI的web伺服器進入點,提供底層的網路通訊功能,通常不用關心。
4、建立app應用
app應用與project專案的區別:
- 一個app實現某個功能,比如部落格、公共檔案資料庫或者簡單的投票系統;
- 一個project是配置檔案和多個app的集合,這些app組合成整個站點;
- 一個project可以包含多個app;
- 一個app可以屬於多個project!
app的存放位置可以是任何地點,但是通常都將它們放在與manage.py
指令碼同級的目錄下,這樣方便匯入檔案。
進入mysite目錄,確保與 manage.py
檔案處於同一級,並且鍵入以下命令來建立app:
[[email protected] mysite]# python manage.py startapp polls
系統會自動生成 polls應用的目錄(這個目錄結構將用於存放poll應用程式),其結構如下:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
5、編寫檢視
讓我們寫第一個檢視。開啟檔案 polls/views.py,並輸入以下Python程式碼:
polls/views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
這是Django中最簡單的檢視。要呼叫檢視,我們需要將它對映到一個URL,為此,我們需要一個URLconf。
要在polls目錄中建立一個URLconf,在polls資料夾中建立一個名為 urls.py 的檔案。您的應用目錄現在應該像這樣:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py
views.py
編輯 polls/urls.py 檔案:
polls/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
你可以看到專案根目錄下的mysite目錄也有個urls.py檔案, 下一步是讓這個專案的主urls.py檔案指向我們建立的polls這個app獨有的urls.py檔案, 開啟 mysite/urls.py 檔案,你需要先匯入include模組,程式碼如下:
mysite/urls.py
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^polls/', include('polls.urls')),
url(r'^admin/', admin.site.urls),
]
方法 include() 相當於二級路由策略, 它將接收到的url地址去除了它前面的正則表示式,將剩下的字串傳遞給下一級路由進行判斷。
include的背後是一種即插即用的思想。專案根路由不關心具體app的路由策略, 只管往指定的二級路由轉發,實現瞭解耦的特性。app所屬的二級路由可以根據自己的需要隨意編寫, 不會和其它的app路由發生衝突。app目錄可以放置在任何位置,而不用修改路由。這是軟體設計裡很常見的一種模式。
建議:除了admin路由外,儘量給每個app設計自己獨立的二級路由。
路由設定成功後,啟動伺服器 python manage.py runserver 0.0.0.0:8000
,然後在瀏覽器中訪問地址http://172.16.92.30:8000/polls/
。將看到“Hello, world. You’re at the polls index.”
url() 引數:
url()方法可以接收4個引數,其中2個是必須的:regex和view,以及2個可選的引數:kwargs和name
url() 引數:regex
regex是正則表示式的通用縮寫,它是一種匹配字串或url地址的語法。 Django拿著使用者請求的url地址,在urls.py
檔案中對urlpatterns
列表中的每一項條目從頭開始進行逐一對比, 一旦遇到匹配項,立即執行該條目對映的檢視函式或二級路由,其後的條目將不再繼續匹配。因此,url路由的編寫順序至關重要!
需要注意的是,regex不會去匹配GET或POST引數或域名, 例如對於 https://www.example.com/myapp
, regex只嘗試匹配 myapp/
。 對於 https://www.example.com/myapp/?page=3
, regex也只嘗試匹配 myapp/
url() 引數:view
當正則表示式匹配到某個條目時,自動將封裝的 HttpRequest
物件作為第一個引數, 正則表示式“捕獲”到的值作為第二個引數,傳遞給該條目指定的檢視。 如果是簡單捕獲,那麼捕獲值將作為一個位置引數進行傳遞,如果是命名捕獲,那麼將作為關鍵字引數進行傳遞。
url() 引數:kwargs 任意數量的關鍵字引數可以作為一個字典傳遞給目標檢視。
url() 引數: name 對你的URL進行命名,可以讓你能夠在Django的任意處,尤其是模板內顯式地引用它。 相當於給URL取了個全域性變數名,不會將url匹配地址寫死,你只需要修改這個全域性變數的值,在整個Django中引用它的地方也將同樣獲得改變。