1. 程式人生 > >Django第二篇-----檢視和 URL 配置

Django第二篇-----檢視和 URL 配置

目錄

helloword

 Django 處理請求的過程

URL 配置和鬆耦合

動態 URL

 hours_ahead 檢視


helloword

新建Django專案在結構如下檔案並新增程式碼

 views.py

from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello world")

 urls.py

from django.conf.urls import url
from django.contrib import admin
from mysite.views import hello

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^hello/$',hello),
]

 訪問如下連結

 Django 處理請求的過程

1. 請求 /hello/ 。
2. Django 檢視 ROOT_URLCONF 設定,找到根 URL 配置。
3. Django 比較 URL 配置中的各個 URL 模式,找到與 /hello/ 匹配的那個。
4. 如果找到匹配的模式,呼叫對應的檢視函式。
5. 檢視函式返回一個 HttpResponse 物件。

6. Django 把 HttpResponse 物件轉換成正確的 HTTP 響應,得到網頁。

URL 配置和鬆耦合

鬆耦合是一種軟體開發方式,其價值在於讓元件可以互換。如果兩部分程式碼之間是鬆耦合的,那麼改動其中一部分對另一部分的影響很小,甚至沒有影響。Django 的 URL 配置就很好地運用了這個原則。在 Django Web 應用中,URL 定義與所呼叫的檢視函式之間是鬆耦合的,即某個功能使用哪個 URL 與檢視函式的實現本身放在兩個地方。

在下述示例中, current_datetime 可以通過兩個 URL 訪問。我們是故意這麼做的,但是其中涉及的知識能用得到。

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^hello/$', hello),
    url(r'^time/$', current_datetime),
    url(r'^another-time-page/$', current_datetime),
]

動態 URL

urlpatterns = [
    # ...
    url(r'^time/plus/(\d+)/$', hours_ahead),
    # ...
]

 hours_ahead 檢視

from django.http import Http404, HttpResponse
import datetime
def hours_ahead(request, offset):
    try:
        offset = int(offset)
    except ValueError:
        raise Http404()
    dt = datetime.datetime.now() + datetime.timedelta(hours=offset)
    html = "In %s hour(s), it will be %s." % (offset, dt)
    return HttpResponse(html)