Django第二篇-----檢視和 URL 配置
阿新 • • 發佈:2018-11-26
目錄
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)