標籤:返回 參數 建立 檔案 conf urls.py檔案 imp render 正則
一、urls.py模組
路由映射模組,主要完成url與views視圖函數的映射。
當一個url請求到來時,會按照這個模組中的url地址從上到下進行匹配,如果匹配成功,將執行映射試圖中的函數;反之將返回404錯誤。
二、url配置
1.urlpatterns
urlpatterns = []
裡面存放一條條的路由映射關係。
2.url
url(Regex, 映射函數,參數[可選],別名[可選])
3.配置方式
from django.conf.urls import urlfrom django.contrib import adminfrom testfile import viewsurlpatterns = [ url(r‘^admin/‘, admin.site.urls), #系統產生的映射 #注意裡面的任意一條映射匹配成功,後面的則不在匹配 url(r‘^articles/2003/$‘, views.special_case_2003), #表示articles/2003/這個路徑映射views模組的special_case_2003函數 url(r‘^articles/([0-9]{4})/$‘, views.year_archive), #表示2003可以是0-9的任意4個數字 url(r‘^articles/([0-9]{4})/([0-9]{2})/$‘, views.month_archive), #表示匹配二級目錄 url(r‘^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$‘, views.article_detail), #表示匹配三級目錄]
注意:上面匹配都加了小括弧,這些括弧裡面的值會當作參數傳遞到後面的函數中,也就是,views.special_case_2003中.....
二、views視圖邏輯處理
1.HttpResponse(request,str)(request參數必須指定)
定義的函數必須,定義一個形式參數,這個形式參數接收的url請求資訊對象,可以通過這個形式參數的各種方法擷取到各種請求資訊 向使用者返回資訊,必須在函數結尾return,如果是要給使用者返回一串字串,那就必須返回HttpResponse方法,參數是要返回的字串,需要先匯入這個方法
2.render(request,"index.html",context)
該函數要完成兩個個操作: 1.將從資料庫擷取的資料填充在{{}}之間 2.渲染html頁面並返回給請求端
3.邏輯處理
from django.shortcuts import render,HttpResponsedef demo(request,path): //path是url匹配加括弧預設傳遞過來的參數 print(request.method) #擷取使用者請求的路徑 return HttpResponse(path) #將路徑返回到頁面
注意:要擷取路徑時,需要在路由映射哪裡用正則的分組()號,將要擷取的路徑分組,也就是括起來,如果路由映射裡有多個分組,邏輯函數就需要多個形式參數接收.
為了更好理解路徑參數是如何傳遞過來的,我們重新來看看url的配置
from django.conf.urls import urlfrom django.contrib import adminfrom app1 import viewsurlpatterns = [ url(r‘^admin/‘, admin.site.urls), #系統產生的映射 url(r‘^articles/([0-9]{4})/([0-9]{2})/$‘, views.month_archive), #表示匹配二級目錄 url(r‘^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$‘, views.article_detail), #表示匹配三級目錄]
views.py函數參數配置
def month_archive(request,year,month): //這裡的參數與路由中的括弧是匹配的, pass
當然,在url正則匹配的時候,我們也可以給分組命名,如:
from django.conf.urls import urlfrom django.contrib import adminfrom testfile import viewsurlpatterns = [ url(r‘^admin/‘, admin.site.urls), #系統產生的映射 url(r‘^(?P<year>articles/2003)/$‘, views.month_views), #表示articles/2003/這個路徑映射views模組的month_views函數
那麼在views視圖中,我們可以這樣來接受這個路徑參數:
from django.shortcuts import render,HttpResponse# Create your views here.def month_view(request,year): print(year) return render(request,‘index.html‘)
三、路由配置include方式
如果一個網站很多,有很多app應用,那麼就需要很多路由分發。如果將所有的路由分發都放在urlconf檔案下,這樣會使得檔案不易於管理,為此,我們可以給每一個app都建立一個urls.py檔案,然後再urlconf中的urlpatterns中將該urls.py檔案包含進來就行了。
from django.conf.urls import include, url # 匯入全域urlurlpatterns = [ url(r‘^bug‘, include(‘testfile.urls‘)), #將訪問路徑以bug開頭的路徑分發到app1下的urls.py模組裡進行路由映射]
這樣,我們可以在testfile的urls下配置屬於testfile的所有路由規則和邏輯處理函數。
Django-url路由映射與views邏輯處理