Views and URLconfs

2020-06-15 17:39 更新

Views and URLconfs

Django 處理 HTTP request 產(chǎn)生 response 的流程

在前面的介紹,我們有提到 Django 的 MTV 架構(gòu)。其處理 request 的流程如下:

  1. 瀏覽器送出 HTTP Request
  2. Django 依據(jù) URL Conf 分配至對應(yīng)的 View
  3. View 進行資料庫的操作或其他運算,并回傳 Http Response 物件
  4. 瀏覽器依據(jù) HTTP Response,顯示網(wǎng)頁畫面

這一章,我們將透過 Hello World 范例 ,瞭解 Django 如何處理一個 request 的流程。

Django Views

Django view 其實是一個 function,處理 HttpRequest 物件,并回傳 HttpResponse 物件,大致說明如下:

  • 會收到HttpRequest 物件參數(shù): Django 從網(wǎng)頁接收到 request 后,會將 request 中的資訊封裝產(chǎn)生一個 HttpRequest 物件,并當(dāng)成第一個參數(shù),傳入對應(yīng)的 view function。

  • 需要回傳HttpResponse物件HttpResponse 物件裡面包含:

  • HttpResponse.content
  • HttpResponse.status_code ...等

建立第一個 View

首先建立一個名為 hello_world 的 View。

trips/views.py輸入下列程式碼:

# trips/views.py

from django.http import HttpResponse

def hello_world(request):
    return HttpResponse("Hello World!")

以上程式在做的事就是:

  1. 從 django.http 模組中引用 HttpResponse 類別
  2. 宣告 hello_world 這個 View
  3. 當(dāng) hello_world 被呼叫時,回傳包含字串 Hello World!HttpResponse 物件。

Django Urls

最后,Django 需要知道 URL 與 View 的對應(yīng)關(guān)係。

例如:

有人瀏覽 http://127.0.0.1:8000/hello/ ,hello_world() 這個 view function 需要被執(zhí)行。

而這個對應(yīng)關(guān)係就是 URL conf (URL configuration)。

URL Conf

  • 通常定義在urls.py
  • 是一連串的規(guī)則 (url pattern)
  • Django 收到 request 時,會一一比對 URL Conf 中的規(guī)則,決定要執(zhí)行哪個 view function

現(xiàn)在我們來設(shè)定,Hello World 范例的 URL Conf:

打開 startproject 時自動產(chǎn)生的urls.py,先 import 剛剛寫的 view function,然后在 urlpatterns 中加入下面這行:

url(r'^hello/$', hello_world),

現(xiàn)在 mysite/urls.py 的內(nèi)容應(yīng)該會像下面這樣:

# mysite/urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin
# import view functions from trips app
from trips.views import hello_world

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'mysite.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    url(r'^admin/', include(admin.site.urls)),
    url(r'^hello/$', hello_world),
)

以上程式透過 url() function 傳入兩個參數(shù) regex, view

url(regex,view)
  • regex -- 定義的 URL 規(guī)則

  • 規(guī)則以 regular expression 來表達
  • r'^hello/$' 代表的是 hello/ 這種 URL

  • view -- 對應(yīng)的 view function

  • 指的是 hello_world() 這個 view
  • 'trips.views.hello_world' -- trips 裡的 views.py 中的 hello_world() function

測試 Hello World

現(xiàn)在,啟動你的 web server。 (如果剛剛沒關(guān)閉的話,通常 Django 會在你修改程式碼后,自動重新啟動 web server)

python manage.py runserver

在瀏覽器輸入 http://127.0.0.1:8000/hello/,你會看到網(wǎng)頁顯示我們在 HttpResponse 傳入的文字Hello World!。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號