Django的日常 路由層

2022-04-26 07:30:05 字數 3640 閱讀 4833

目錄反向解析

路由的分發

我們之前已經接觸過路由層,只是我們可能不知道他叫這個名字,實際上在django裡面路由層指的就是urls.py這個檔案.

路由的概念是什麼,我們平時生活中接觸最多的和路由有關的大概就是路由器了,那麼路由器是幹嘛的?

路由器是連線多個網路的硬體裝置,在網路之間起到閘道器的作用,可以對不同網路的網路之間的資料報進行處理和**.

urls.py裡面配置的模板為:

# urls.py

from django.conf.urls import url #這裡匯入url,要注意的是django在版本為1.x的時候是用的url,但是在版本為2.x的時候用的是path,且用法不太一樣,2.x版本的re_path的用法是完全繼承於url的,但是path不能,最大的區別就在於path不能用正則來匹配**

urlpatterns = [

url(regex, view, kwargs=none, name=none), # url本質就是乙個函式

]# view:通常為乙個檢視函式,用來處理業務邏輯

# 舉個栗子:

urlpatterns = [

url(r'^admin/', admin.site.urls), # 系統預設的

url(r'test/$', views.test), # 嚴格正則,必須乙個字不差才能進去該網頁

url(r'^$', views.home), # **首頁,只有**的首頁不含任何字尾,所以通常用這種寫法來轉到**首頁

# url(r'test/[0-9]', views.test), #正則匹配,數字,且必須是四位

url(r'', views.errors) # 自定義報錯404頁面,與**首頁不同,這個定義一定要放在最後面,不能放在前面,不然會阻止下方url的判斷

]# 這裡有幾個注意事項:

1. url第乙個引數是乙個正規表示式

2. 一旦匹配上了,會立刻執行對應的檢視函式,不再往下匹配

3. ^ 可以限制其開頭,$可以限制其結尾,這是正則匹配裡面的內容

還有乙個小問題,其實有時候我們在輸入**的時候,沒有加最後面的左下劃線,可是網頁還是跳轉成功了,這是因為django裡面會有這個配置,在settings.py檔案裡面,在最後我們可以定義乙個

# 因為django裡面這個值預設為true,也就是缺省會補齊,實際情況是補上左下劃線再嘗試一次,並不是補齊的概念

比如,我們在設定過這個選項之後,在輸入以下**

當前,前提是你已經設定過urls以及寫了乙個views函式名為index

我們可以在網頁f12的檢查裡面的network標籤裡看到兩個請求,乙個是index,乙個是index/,

而index的請求狀態碼為301,也就是重定向,index/的狀態碼為200,這才是我們最後看到的網頁的結果

首先,分組,我們知道分組的目的就是為了把有相同特質的事物分到一起,便於查詢和管理,django裡面也是如此的,我們把相似內容或者格式的網頁分到一組,可以讓我們更方便的管理網頁.

那麼在分組之後我們應該怎麼呼叫這些網頁呢,比如我們在/這個字尾下面建立了100個網頁,從/1/100那麼難道我們需要在urls.py裡面寫一百條語句?

非也,此時我們分組的重要性就體現出來了.分組可以完美解決這個問題,下面我們就來介紹兩種分組方式,無名分組和有名分組

無名分組

# 無名分組的方式大致如下

from django.contrib import admin

urlpatterns = [

url(r'^admin/', admin.site.urls),#這個是預設的,不用管

# 下述正規表示式會匹配的部分為:index/數字/,匹配成功的分組部分會以位置引數的形式傳給檢視函式,注意,是位置引數,我們在views.py裡面接收引數的時候要注意格式,要定義成index(request,*args)

url(r'^index/(\d+)/$',views.index),

]# 這樣分組的情況下,我們輸入的**,但凡字首是/,後面加的乙個純數字的**,都可以匹配進入index這個函式,然後執行

有名分組
#有名分組如下

# 無名分組的方式大致如下

from django.contrib import admin

urlpatterns = [

url(r'^admin/', admin.site.urls),#這個是預設的,不用管

# 匹配的方式和無名分組相似,但是,匹配成功的部分是以關鍵字引數的形式傳輸的,注意,是關鍵字引數,我們在views.py裡面接收引數的時候要注意格式,要定義成index(request,**kwargs)

url(r'^index/(?p\d+)/$',views.index),# 分組,取名為year

]

這裡要強調一點的是,有名分組和無名分組不能混合使用,也就是說同乙個url裡面,可以有多個有名分組,也可以有多個無名分組,但是不能同時包含有名分組和無名分組.

在說反向解析之前,我們要知道解析的概念,在django裡面,解析的概念就是我們寫好後端和前端,執行起來,前端把自己的**翻譯出來,當別人輸入**就自動跳轉到這個介面,大概就是解析的概念,解析的關鍵在於通過正確的路徑獲取到乙個物件,或者乙個**.

那麼反向解析的概念也就出來了,反向解析就是我們從乙個別名,或者說是從乙個物件來獲取到其路徑的這麼乙個過程,就叫做反向解析.反向解析在django裡面最大的便利在於我們會給url起乙個別名,然後通過這個別名來獲取路徑,這樣不管我們url字尾怎麼改變,其餘的**都不用隨之發生變化.

反向解析一般在三個地方會使用,即平時固定**使用,或者在有名分組以及無名分組裡面使用.

無分組的反向解析

首先,反向解析的前提是我們要在urls.py裡面的url裡定義name屬性

# urls.py

# 那麼我們需要在前端,也就是html頁面裡面這麼寫

# edit_uset.html

# 然後,我們需要在後端,也就是views.py裡面寫

from django.shortcuts import reverse

# 這樣可以直接解析出來乙個物件,此時反向解析全部完成

無名分組的反向解析

# 和無分組有一定的區別

# 無名分組的反向解析

# urls.py

# 那麼我們需要在前端,也就是html頁面裡面這麼寫

# edit_uset.html

# user_obj.pk 會取到該物件的主鍵

# 然後,我們需要在後端,也就是views.py裡面寫

from django.shortcuts import reverse

有名分組的反向解析
# 有名分組的反向解析

# urls.py

# 那麼我們需要在前端,也就是html頁面裡面這麼寫

# edit_uset.html

# 然後,我們需要在後端,也就是views.py裡面寫

from django.shortcuts import reverse

這裡我們有一種非常簡單的執行方法

# /urls.py

urlpatterns = [

]

Django的路由層

一 簡單的路由配置 from django.conf.urls import urlviews urlpatterns path views.index 二 有名分組 先欠著三 分發 from django.conf.urls import include,url urlpatterns url r...

django之路由層

1.django中urls.py負責url的路由分發urlpatterns url r admin admin.site.urls url的第乙個引數實際為乙個正規表示式,第二個引數為檢視函式。瀏覽器訪問時,會遍歷該列表,匹配到則終止,不再往下匹配。當使用者訪問的url不存在時,django會嘗試將...

5 Django 1 的路由層

url就像django 所支撐 的目錄。它的本質是url與要為該url呼叫的檢視函式之間的對映表 你就是以這種方式告訴django,對於客戶端發來的某個url呼叫哪一段邏輯 對應執行。from django.conf.urls import url from import views urlpatt...