博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django的URL路由
阅读量:3908 次
发布时间:2019-05-23

本文共 2569 字,大约阅读时间需要 8 分钟。

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

diango的url路由配置

路由是关联url及其处理函数关系的过程

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

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

Django的URL路由流程

(1)Django查找全局urlpattern变量()

(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 pathfrom . import viewsurlpatterns = [path('articles/2003/', views.special_case_2003),path('articles/
/', views.year_archive),path('articles/
/
/', views.month_archive),path('articles/
/
/
/', 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),
]
--> views.help()
--> views.sub()

  • include()用法:1) 附加本地路由; 2) 路径去重

URL根目录的处理

的响应

urlpatterns = [
path(’’, <根目录处理函数>),
re_path(’^$’, <根目录处理函数>), # 或者,二选一
]

转载地址:http://cfkrn.baihongyu.com/

你可能感兴趣的文章
被忽略的TraceId,可以用起来了
查看>>
[原]调试PInvoke导致的内存破坏
查看>>
【NServiceBus】什么是Saga,Saga能做什么
查看>>
ASP.NET Core 集成测试中模拟登录用户的一种姿势
查看>>
程序员修神之路--容器技术为什么会这么流行(记得去抽奖)
查看>>
[ASP.NET Core 3框架揭秘] 异步线程无法使用IServiceProvider?
查看>>
.NET Core 3.0之深入源码理解HealthCheck(一)
查看>>
收藏!推荐12个超实用的Visual Studio插件
查看>>
2020年你应该学习 .Net Core
查看>>
[译文] C# 8 已成旧闻, 向前, 抵达 C# 9!
查看>>
.NETCore3.1中的Json互操作最全解读-收藏级
查看>>
【实战 Ids4】║ 给授权服务器加个锁——HTTPS配置
查看>>
2020年了,再不会Https就老了
查看>>
Kubernetes,多云和低代码数据科学:2020年最热门的数据管理趋势
查看>>
.NET Core 3.1之深入源码理解HealthCheck(二)
查看>>
C# WPF 表单更改提示
查看>>
【原创】StackOverflow 20万关注的问题:如何实现异步Task超时的处理?
查看>>
.NET Core 3.1通用主机原理及使用
查看>>
UnitTest in .NET(Part 1)
查看>>
CAP 3.0 版本正式发布
查看>>