1. 程式人生 > >Django-url路由映射與views邏輯處理

Django-url路由映射與views邏輯處理

con creat 如何 定義 req tro hive htm ret

一、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 admin
from 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邏輯處理