1. 程式人生 > >Django 1.8_視圖和URL配置

Django 1.8_視圖和URL配置

多個 則表達式 斜線 所在 offset 以及 正則 消息 sites

前情提要

  學習了如何創建django項目,運行開發django服務器,並了解了mvc模式。

內容

  VIEW

  URL

    正則表達式

    錯誤解析與尋求幫助

  • hello world.html
  • dynamic_date.html
  • dynamic_date_offset.html 

  Django處理請求的過程

Helloword

  創建一網頁,打開即顯示helloworld。

  其中網頁內容由視圖生成,並配置URL。

    在mysite/mysites下創建views.py並編輯

技術分享圖片
1 from django.http import HttpResponse
2 3 def hello(request): 4 return HttpResponse(HELLO, WORLD!)
views.py

技術分享圖片
 1 from django.conf.urls import include, url 
 2 # include,導入另一個url的配置模塊
 3 # url,使用正則表達式模式匹配瀏覽器中的url,並映射到django項目的某個模塊上
 4 from django.contrib import admin 
 5 from mysite import views 
 6 
 7 urlpatterns = [
 8     url(r
^admin/, include(admin.site.urls)), 9 url(r^hello/$, views.hello), 10 ]
urls.py

dynamic_date

技術分享圖片
 1 from django.http import HttpResponse
 2 import datetime
 3 
 4 def hello(request):
 5     return HttpResponse(HELLO, WORLD!)
 6 
 7 # new add
 8 def current_datetime(request):
 9     now = datetime.datetime.now()
10 html = "It‘s now %s." % now 11 return HttpResponse(html)
views.py 技術分享圖片
 1 from django.conf.urls import include, url 
 2 # include,導入另一個url的配置模塊
 3 # url,使用正則表達式模式匹配瀏覽器中的url,並映射到django項目的某個模塊上
 4 from django.contrib import admin 
 5 from mysite import views 
 6 
 7 urlpatterns = [
 8     url(r^admin/, include(admin.site.urls)),
 9     url(r^hello/$, views.hello), 
10     # new add
11     url(r^time/$, views.current_datetime)
12 ]
urls.py

dynamic_date_offset

技術分享圖片
 1 from django.conf.urls import include, url 
 2 # include,導入另一個url的配置模塊
 3 # url,使用正則表達式模式匹配瀏覽器中的url,並映射到django項目的某個模塊上
 4 from django.contrib import admin 
 5 from mysite import views 
 6 
 7 urlpatterns = [
 8     url(r^admin/, include(admin.site.urls)),
 9     url(r^hello/$, views.hello), 
10     url(r^time/$, views.current_datetime),
11     # new add
12     url(r^time/plus/(\d{1,2})/$, views.hours_ahead) # 限制使用一個或者兩個數字,最大偏移為99
13 ]
urls.py 技術分享圖片
 1 from django.http import HttpResponse, Http404
 2 import datetime
 3 
 4 def hello(request):
 5     return HttpResponse(HELLO, WORLD!)
 6 
 7 def current_datetime(request):
 8     now = datetime.datetime.now()
 9     html = "It‘s now %s." % now
10     return HttpResponse(html)
11 
12 # new add
13 def hours_ahead(request, offset):
14     try:
15         offset = int(offset) # 捕捉url中的偏移量數字,為unicode編碼,轉化成數字,後續用
16     except ValueError:
17         raise Http404()
18     dt = datetime.datetime.now() + datetime.timedelta(hours=offset)
19     html = "In %s hours, it will be %s" %(offset, dt)
20     return HttpResponse(html)
views.py

Note: URL 和視圖之間是松耦合的,即可以通過多個url定位到同一個視圖,改變一個對另一個影響很小。

正則表達式

  .  單個字符

  \d  單個數字

  [A-Z]  大寫字母中的某一個

  [a-z]  小寫字母中的某一個

  [A-Za-z]  不區分大小寫的某一個字母

+    一個或者多個前述表達式  \d+

  [^/]+   一個或多個字符,直到遇到斜線

  ?    零個或者一個前述表達式  \d?

  *    零個或者多個前述表達式  

  {1,3}  介於一個到三個之間前述表達式

Django處理請求的過程

  點擊url,後顯示頁面,django做了什麽

  1. 請求/hello/
  2. Django查看ROOT_URLCONF設置,找到根URL配置
  3. Django比較URL配置中的各個URL模式,找到與/hello/匹配的那個
  4. 如果找到匹配的模式,調用對應的視圖函數
  5. 視圖函數返回一個HttpResponse對象
  6. Django把HttpResponse對象轉化正確的HTTP響應,得到網頁

錯誤解析和尋求幫助

  頁面頂部是異常關鍵信息: 異常類型和消息,拋出異常的文件以及所在的行號

  Trackback標題旁邊有“Switch to copy-and-paste view”文本。點擊後,就會切換到另一個版本,以便分享給別人,尋求幫助。

Django 1.8_視圖和URL配置