Django學習——路由層之路由匹配、無名分組、有名分組、反向解析
路由層之路由匹配
"""路由你可以看成就是出去ip和port之後的地址"""
url()方法
1.第一個參數其實是一個正則表達式
2.一旦第一個參數匹配到了內容直接結束匹配 執行對應的視圖函數
url(r'^test/$',views.test),
無名分組
url(r'^test/\d+/$',views.test),
# 正則表達式分組:給正則表達式前後加一個小括弧
url(r'^test/(\d+)/$',views.test),
"""
無名分組
將括弧內正則表達式匹配到的內容當做位置參數傳遞給後面的視圖函數
"""
有名分組
正則表達式可以起別名
url(r'^testadd/(?P<id>\d+)/$',views.testadd),
"""
有名分組
將括弧內正則表達式匹配到的內容當做關鍵字參數傳遞給後面的視圖函數
"""
是否可以結合使用
url(r'^test1/(\d+)/(?P<id>\d+)/$',views.test1),
1.無名有名分組不能混合使用
url(r'^test2/(\d+)/(\d+)/$',views.test2),
url(r'^test3/(?P<id>\d+)/(?P<id1>\d+)/$',views.test3),
2.可以單個重複使用
反向解析
當路由頻繁變化的時候,HTML介面上的鏈接地址如何做到動態解析
# 1.給路由與視圖函數對應關係添加一個別名(名字自己指定 只有不衝突即可)
url(r'^index/', views.index,name='index_name'),
# 2.根據該別名動態解析出一個結果,該結果可以直接訪問到對應的路由
前端
<a href="{% url 'index_name' %}">111</a>
後端
from django.shortcuts import reverse
reverse('index_name')
ps:redirect括弧內也可以直接寫別名
無名有名反向解析
url(r'^index/(\d+)/', views.index,name='index_name'),
後端
reverse('index_name',args=(1,)) # args一般放數據的主鍵值 只要給個數字即可
前端
<a href="{% url 'index_name' 1 %}">111</a> # 只要給個數字即可
url(r'^index/(?P<id>\d+)/', views.index,name='index_name'),
後端
reverse('index_name',kwargs={'id':123}) # 只要給個數字即可
前端
<a href="{% url 'index_name' id=666 %}">4444</a> # 只要給個數字即可
總結
無名有名都可以使用一種(無名)反向解析的形式
內容回顧
- 資料庫同步命令
inspectdb - Django請求生命周期流程圖
1.web服務網關介面
wsgiref
uwsgi
2.灰色地帶(Django中間件)
3.路由層
4.視圖層
5.模板層
6.模型層 - 路由匹配
1.自動補全斜杠
APPEND_SLASH = True
2.url()方法
第一個參數是正則表達式
# 路由匹配特性:一旦正則能夠匹配到內容則停止繼續往下而是直接執行對應的功能 - 無名有名分組
無名分組
給正則表達式加上一個括弧
url(r'index/(\d+)/',views.index)
執行視圖函數的時候會將括弧內匹配到的內容當做位置參數傳遞給視圖函數
有名分組
給正則表達式加上一個括弧並且起一個別名
url(r'index/(?P\d+)/',views.index)
執行視圖函數的時候會將括弧內匹配的內容當做關鍵字參數傳遞給視圖函數
ps:兩者不能混合使用,但是單獨可以重複使用 - 反向解析
"""通過別名得到一個可以訪問該別名對應的路由規則"""
1.起別名(不能衝突)
url(r'index/',views.index,name='index_name')
2.反向解析
前端
{% url 'index_name' %}
後端
from django.shortcuts import reverse
url = reverse('index_name') - 無名有名反向解析
"""當路由出現無名有名分組反向解析需要傳遞額外的參數"""
url(r'index/(\d+)/',views.index,name='index_name')
前端
{% url 'index_name' 1 %}
後端
from django.shortcuts import reverse
url = reverse('index_name',args=(1,))
ps:有名分組的反向解析也可以使用無名的方式
# 了解
url(r'index/(?P\d+)/',views.index,name='index_name')
前端
{% url 'index_name' 1 %}
後端
from django.shortcuts import reverse
url = reverse('index_name',kwargs={'id':1})

