1. 程式人生 > >(一)django新建project和app、編寫檢視

(一)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中引用它的地方也將同樣獲得改變。