django的路由管理,由應用檔案下的urls.py檔案進行管理
所有的路由都放置在urlpatterns中
每乙個路由在定義的時候,需要通過路由函式來定義
路由函式,常見的有path,url
path(router,view,kwargs,name) 普通路由的定義
url(router,view,kwargs,name) 支援正規表示式
兩者在定義router上有所區別
- 普通路由
用path函式定義,router是乙個普通的字串。
# 在urls.py中定義到乙個跳轉到登入頁面的路由
from
.import views.py
path(
"login"
, views.login,name=
"login"
)# 在views.py檔案中寫login()函式
)# 完成最基本的路由週期
- 引數路由(動態路由)
用path函式定義,router在定義路由的時候使用<[type:]key>設定
# 帶參路由
path(
"detail/"
, views.detail, name=
"detail"
)# 如果不加type限制 pk預設的格式是字串
# 帶參檢視函式
defdetail
(request, pk)
:return httpresponse
django內建了5個型別轉換器converters.py
str預設的,不能匹配 /
int代表整數
slug匹配數字字母下劃線和中劃線
uuid匹配符合uuid格式的字串
path匹配所有,包括 /
此外,還可以自定義型別轉換器
例如定義乙個只匹配年份的路由:
1.在應用包下建立乙個converters.py檔案
from django.urls.converters import intconverter
# 繼承intconverter父類
class
year_converter
(intconverter)
: regex = r"(19|20)\d"
2.之後在__init__.py檔案中匯入converters.py和django的converters的型別註冊函式
from
.import converters
from django.urls.converters import register_converter
# 將自定義的轉換器進行註冊
# 第乙個引數代表自定義的型別轉換器,第二個引數代表名字
register_converter(converters.year_converter,
"year"
)# 在urlpatterns中使用該型別轉換器
urlpatterns =
[path(
"", views.year)
]
在views.py中定義year函式
"傳入的年份是{}"
.format
(year)
)- 正則路由
用url函式定義,router是乙個支援正規表示式的字串
在urls.py中匯入包from django.urls import url
用法跟path類似 常用於模糊匹配
正則路由帶引數:
url(r"^detail/(?p\d+)$", views.detail, name="detail")
- 分布式路由
用於分布將當前路由轉到各個模組的urlpatterns進行分布式處理
from django.conf.urls import include
path("cart", include(cart.urls))
- 路由的反向解析
根據路由的name屬性查詢路由的過程
在模板中進行路由的反向解析
在檢視函式中進行路由的反向解析
from django.shortcuts import reverse
redirect(to=
"/")
redirect(to=reverse(
'router_name'))
# 帶參路由反向解析 例:
redirect(to=
'/next/11'
)redirect(to=reverse(
'next'
, args=(11
,12))
)
django學習記錄
django的處理流程 當使用者發出http請求,urlhandler接收使用者請求,根據開發人員設定的路由規則匹配相應的處理類 根據請求的型別判斷呼叫的http方法 如果需要連線資料庫,views中的函式將會呼叫models的方法,否則直接去template中取出html頁面直接返回 呼叫mode...
Django開發記錄 2
配置view.py檔案 新增url,配置urls.py檔案 import blog.views as bv urlpatterns path admin admin.site.urls path index bv.index 通過include方法,匯入外部檔案。修改myblog.urls.py f...
django學習記錄 RequestContext
官方文件 requestcontext是context的子類,跟context有一些區別 requestcontext強迫第乙個引數是 request 第二個是乙個構造 context 物件用的字典,第三個是可選的,是乙個自定義的 context processer 上下文處理器 requestco...