Django路由介绍
一,路由的作用
URL配置就是Django支持的網址的目錄,它的本質是URL與調用的視圖函數之間的映射表,用URL告訴Django該執行哪個函數。
二,路由的配置
from django.conf.urls import urlurlpatterns = [url(正則表達式, views視圖函數,參數,別名), ]?
ps:第一個參數是正則表達式,匹配規則按照從上往下依次匹配,匹配到一個之后會立即匹配,直接執行其對應的視圖函數
網站首頁路由:
url(r'^$',views.home)網址不存在路由:
url(r'',views.error)?
三,無名分組
本質:將加括號的正則表達式匹配到內容當做位置參數自動傳遞給對應的視圖函數。
urls.py
url(r'^test/(\d+)/',views.test), # 匹配一個或多個數字views,py
def test(request,xxx): # 括號中內容傳給了XXXprint(xxx)return HttpResponse('test')四,有名分組
本質:將加括號的正則表達式匹配到的內容當做關鍵字參數自動傳遞給對應的視圖函數。
urls.py
url(r'^test/(?P<year>\d+)/',views.test), # 匹配一個或多個數字(?<year>:給參數取名叫year)views.py
def test(request,year): # 括號中的參數部分傳給了yearprint(year)return HttpResponse('test')ps:1,無名分組和有名分組不能混著用。2,可以支持用類型多個形式匹配
url(r'^test/(\d+)/(\d+)/',views.test), # 無名分組多個 url(r'^test/(?P<year>\d+)/(?P<xxx>\d+)/',views.test), # 有名分組多個?
五,反向解析:
本質:就是獲取到一個能夠訪問名字所對應的視圖函數(根據名字動態獲取對應的路徑)
方式:
在前端中:
{# 在前端頁面中,跳轉到test函數,并且攜帶兩個參數10,23#}<a href="{% url 'test' 10 23 %}">哈哈</a>在urls.py中:
from django.conf.urls import url from app01 import views urlpatterns = [# 兩個參數一個year被,一個month# 與視圖函數的對應關系命名為testurl(r'^test/(?P<year>[0-9]{2})/(?P<month>[0-9]{2})/$',views.url_test,name='test'), ]在視圖函數中:
from django.shortcuts import render, HttpResponse,redirect,reverse def url_test(request,year,month):print(year)print(month)url=reverse('test',args=(10,20))print(url)return HttpResponse('ok')總結:
1:在html中:{% url "別名" 參數? 參數%}
2:url=reverse('test',args=(10,20))
ps:
1:可以給每一個路由與視圖函數對應關系起一個名字
2:這個名字能夠唯一標識出對應的路徑
3:注意這個名字不能重復是唯一的
六:路由分發:
項目名下的urls,py(總路由)不再做路由與視圖函數的匹配關系而是做路由分發。
總路由:
from django.conf.urls import include urlpatterns = [ # 路由分發 注意路由分發總路由千萬不要$結尾url(r'^app01/',include(app01_urls)),url(r'^app02/',include(app02_urls)) ]在應用下新建urls.py文件,在該文件內寫路由與視圖函數的對應關系即可。
from django.conf.urls import url from app01 import views urlpatterns = [url(r'^index/',views.index) ]七,名稱空間:
原因:由于name沒有作用域,Django在反解URL時,會在項目全局順序搜索,當查找到第一個name指定URL時,立即返回我們在開發項目時,會經常使用name屬性反解出URL,當不小心在不同的app的urls中定義相同的name時,可能會導致URL反解錯誤,為了避免這種事情發生,引入了命名空間。
在路由分發的時候處理名稱空間:
url(r'app01/',include('app01.urls',namespace='app01')),url(r'app02/',include('app02.urls',namespace='app02'))ps:用處很少,因為我們命名的時候都會用不同的名字,(前綴用項目名標識)
八,偽靜態:
后綴為.html結尾會被認為是靜態網頁(數據不變),在url后面加上.html增加被收錄的概率。
url(r'^index.html',views.index) url(r'^test/(\d+.html)',views.index) url(r'^demo/(?P<year>\d+.html)')九,虛擬環境:
虛擬環境創建(先創建一個python項目,選擇虛擬項目記得勾選能夠被應用于其他項目,下次創建項目時即可選擇改虛擬環境作為開發環境)
Django2.0版本與1.0區別
一:1.0版本的url和2.0版本的re_path分組出來的數據都是字符串類型
二:默認有五個轉換器,感興趣的自己可以課下去試一下
三:str,匹配除了路徑分隔符(/)之外的非空字符串,這是默認的形式
四:int,匹配正整數,包含0。
五:slug,匹配字母、數字以及橫杠、下劃線組成的字符串。
六:uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
七:path,匹配任何非空字符串,包含了路徑分隔符(/)
十,自定義轉換器:
三部分:1:正則表達式 2:to_python 3:to_url
class FourDigitYearConverter: regex = '[0-9]{4}' def to_python(self, value): return int(value) def to_url(self, value): return '%04d' % value 占四位,不夠用0填滿,超了則就按超了的位數來! register_converter(FourDigitYearConverter, 'yyyy') urlpatterns = [ path('articles/2003/', views.special_case_2003), path('articles/<yyyy:year>/', views.year_archive) ]?
?
轉載于:https://www.cnblogs.com/ay742936292/p/10998635.html
總結
以上是生活随笔為你收集整理的Django路由介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前后端后离的概念
- 下一篇: 十八、启动jmeter时提示findst