Django的URL路由

文章摘自北京理工大学嵩天老师云端入门系列课程,这里只是我个人的笔记。

diango的url路由配置

路由是关联url及其处理函数关系的过程
setting.py文件中ROOT_URLCONF变量指定全局路由文件名称
ROOT_URLCONF = ‘<工程名称.urls>’ # 默认对应工程目录下urls.py文件
Django使用urlpatterns变量表示路由(urls.py),该变量是列表类型,由path()或re_path()作为元素组成

urlpatterns = [
    path('msggate/', include('msgapp.urls')),
    path('admin/', admin.site.urls),
]

Django的URL路由流程

(1)Django查找全局urlpattern变量(urls.py
(2)Django按照先后顺序,对URL逐一匹配urlpattern每个元素
(3)在找到第一个匹配时,停止查找,根据匹配结果执行对应处理函数
(4)如果没有找到匹配或出现异常,Django进行错误处理
注意:Django的路由不考虑HTTP请求方式,仅根据URL进行路由,即只要url相同,无论POST,GET等哪种请求方式都指向同一个操作函数

路由:path()和re_path()

path()处理字符串路由,re_path()处理正则表达式路由
url字符串:path(route,view)
正则表达式:re_path(route,view)

path(route,view,kwargs=None,name=None)路由函数

  • route :URL或URL模式,Django定义的URL转换语法
  • view:处理(视图)函数的名称,或include()类
  • kwargs:向处理函数提供的额外参数,以字典形式表示
  • name:给URL模式的命名

route的格式和转换

from django.urls import path
from . import views
urlpatterns = [
path('articles/2003/', views.special_case_2003),
path('articles/<int:year>/', views.year_archive),
path('articles/<int:year>/<int:month>/', views.month_archive),
path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]

Django支持三种方式表达route
• (1) 精确字符串格式:articles/2003/
• (2) Django的转换格式:<类型:变量名>,articles/int:year/
• (3) 正则表达式格式:articles/(?P[0-9]{4}/

(1) 精确字符串格式

• 一个精确URL匹配一个操作函数
• 最简单形式,适合对静态URL的响应
• URL字符串不以 / 开头,但要以 / 结尾
articles/2003/

(2) Django的转换格式

• 一个URL模板,匹配URL同时在其中获得一批变量作为参数
• 常用形式,目的是通过URL进行参数获取和传递
• 采用 <类型:变量名> 格式获取参数
请求URL: articles/2018/
Django的转换格式: articles/int:year/
匹配 : year: 2018

转换格式类型说明
str匹配除分隔符(/)外的非空字符串,默认类型 等价于 str:year
int匹配0和正整数
slug匹配字母、数字、横杠、下划线组成的字符串,str的子集
uuid匹配格式化的uuid,如: 075194d3-6885-417e-a8a8-6c931e272f00
path匹配任何非空字符串,包括路径分割符,是全集
(3) 正则表达式格式

• 借助正则表达式丰富语法表达一类URL (不是一个)
• 可以通过<>提取变量作为处理函数的参数,高级用法
• 使用re_path()函数
articles/([0-9]{4})/
• 使用re_path()函数,两种具体形式:
• 简单形式 (pattern),不提取参数:articles/([0-9]{4})/
• 命名形式 (?Ppattern),提取参数,统一为str类型:
articles/(?P[0-9]{4})/

路由函数path(route, view, kwargs=None, name=None)

· route : URL或URL模式,Django定义的URL转换语法
· view : 处理(视图)函数的名称,或include()类
· kwargs: 向处理函数提供的额外参数,以字典形式表示
· name : 给URL模式的命名

view的使用

View包括两种类型:处理函数和include()函数
• 处理函数:views.py中处理URL的对应函数,URL处理的归宿
urlpatterns = [
path(‘help/’, views.help),
path(‘sub/’ , views.sub),
]
• include()函数:包含其他路由信息的函数,分段路径组合形成总路径
View包括两种类型:处理函数和include()函数
urlpatterns = [
path(‘entry/’, include(‘appA.urls’)),
]
urlpatterns = [
path(‘help/’, views.help),
path(‘sub/’, views.sub),
]
http://127.0.0.1:8000/entry/help/ --> views.help()
http://127.0.0.1:8000/entry/sub/ --> views.sub()

  • include()用法:1) 附加本地路由; 2) 路径去重
URL根目录的处理

http://127.0.0.1:8000/ 的响应
urlpatterns = [
path(’’, <根目录处理函数>),
re_path(’^$’, <根目录处理函数>), # 或者,二选一
]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值