Django 1.8_檢視和URL配置
阿新 • • 發佈:2018-11-11
前情提要
學習瞭如何建立django專案,執行開發django伺服器,並瞭解了mvc模式。
內容
VIEW
URL
正則表示式
錯誤解析與尋求幫助
- hello world.html
- dynamic_date.html
- dynamic_date_offset.html
Django處理請求的過程
Helloword
建立一網頁,開啟即顯示helloworld。
其中網頁內容由檢視生成,並配置URL。
在mysite/mysites下建立views.py並編輯
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 from django.http import HttpResponse 2 3 def hello(request): 4 return HttpResponse('HELLO, WORLD!')views.py
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 from django.conf.urls import include, url 2 # include,匯入另一個url的配置模組 3 # url,使用正則表示式模式匹配瀏覽器中的url,並對映到django專案的某個模組上 4 from django.contrib importurls.pyadmin 5 from mysite import views 6 7 urlpatterns = [ 8 url(r'^admin/', include(admin.site.urls)), 9 url(r'^hello/$', views.hello), 10 ]
dynamic_date
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 from django.http import HttpResponse 2 import datetime 3 4 def hello(request): 5 return HttpResponse('views.pyHELLO, 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)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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做了什麼
- 請求/hello/
- Django檢視ROOT_URLCONF設定,找到根URL配置
- Django比較URL配置中的各個URL模式,找到與/hello/匹配的那個
- 如果找到匹配的模式,呼叫對應的檢視函式
- 檢視函式返回一個HttpResponse物件
- Django把HttpResponse物件轉化正確的HTTP響應,得到網頁
錯誤解析和尋求幫助
頁面頂部是異常關鍵資訊: 異常型別和訊息,丟擲異常的檔案以及所在的行號
Trackback標題旁邊有“Switch to copy-and-paste view”文字。點選後,就會切換到另一個版本,以便分享給別人,尋求幫助。