Django-url路由映射與views邏輯處理
一、urls.py模塊
路由映射模塊,主要完成url與views視圖函數的映射。
當一個url請求到來時,會按照這個模塊中的url地址從上到下進行匹配,如果匹配成功,將執行映射試圖中的函數;反之將返回404錯誤。
二、url配置
1.urlpatterns
urlpatterns = []
裏面存放一條條的路由映射關系。
2.url
url(正則表達式, 映射函數,參數[可選],別名[可選])
3.配置方式
from django.conf.urls import url from django.contrib import adminfrom testfile import views urlpatterns = [ 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,HttpResponse def demo(request,path): //path是url匹配加括號默認傳遞過來的參數 print(request.method) #獲取用戶請求的路徑 return HttpResponse(path) #將路徑返回到頁面
註意:要獲取路徑時,需要在路由映射哪裏用正則的分組()號,將要獲取的路徑分組,也就是括起來,如果路由映射裏有多個分組,邏輯函數就需要多個形式參數接收.
為了更好理解路徑參數是如何傳遞過來的,我們重新來看看url的配置
from django.conf.urls import url from django.contrib import admin from app1 import views urlpatterns = [ 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 url from django.contrib import admin from testfile import views urlpatterns = [ 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 # 導入全局url urlpatterns = [ url(r‘^bug‘, include(‘testfile.urls‘)), #將訪問路徑以bug開頭的路徑分發到app1下的urls.py模塊裏進行路由映射 ]
這樣,我們可以在testfile的urls下配置屬於testfile的所有路由規則和邏輯處理函數。
Django-url路由映射與views邏輯處理