栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Django13——URL信息的截取

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django13——URL信息的截取

文章目录
  • 1、path和re_path
    • path
    • re_path
    • 正则表达式规则
  • 2、使用path捕获url中值示例
  • 3、使用re_path捕获url中值示例
    • 位置参数
    • 位置参数练习
    • url的命名参数(关键字参数)
    • url的命名参数练习

在实际网站开发中,我们不会把所有信息都以参数形式传递到web服务器上,这样的话,整个URL显得比较混乱,很多网站是把这种信息直接在URL中体现出来的。
比如:

https://www.jianshu.com/p/c36c54d4ca9a
https://www.jianshu.com/p/f78bd9f2bd30

通过最后的数字来代表不同的文章。

1、path和re_path path

在django2.x及以上版本中,描写url配置的有两个函数path和re_path。

函数 path()是写的非正则路由(route),接下来主要看一下path()函数的四个参数含义。

  • path()参数route: route是一个匹配URL的准则(类似正则表达式)。当Django响应一个请求时,它会从urlpatterns的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。这些准则不会匹配GET和POST参数或域名。例如,URLconf在处理请求https://www.example.com/myapp/时,它会尝试匹配myapp/。处理请求https://www.example.com/myapp/?page=3时,也只会尝试匹配 myapp/。

  • path()参数view: 当 Django找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个HttpRequest对象作为第一个参数,被“捕获”的参数以关键字参数的形式传入。

  • path()参数kwargs: 任意个关键字参数可以作为一个字典传递给目标视图函数。

  • path()参数name: 为URL取名,能使你在 Django的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许你只改一个文件就能全局地修改某个URL模式。

path() 具有四个参数,两个必须参数:route 和 view;两个可选参数:kwargs 和 name。即路由和视图是必填参数。第一个参数route使用的是非正则表达式可以表示的普通路由路径。

注意:
要从URL捕获值,请使用尖括号。
捕获的值可以选择包括转换器类型。例如,用于 捕获整数参数。
int - 匹配零或任何正整数。返回一个int。

比如要匹配一个函数视图,该函数有两个形参:

def peopleList(request,book_id)

第一个request是默认的,那么路径自动匹配该函数的第二个形参,匹配格式:,并返回一个正整数或零值。

re_path

path中第一个参数route使用的是非正则表达式可以表示的普通路由路径。而如果遇上路径和转换器语法都不足以定义的URL模式,那么就需要使用正则表达式,这时候就需要使用re_path(),而非path()。

正则表达式规则

往往网站的资源是非常多的,如果每个资源都分配一个独立的URLConf,那么整个网站的代码维护会非常麻烦,所以为了URLConf的维护,django的URL采用了正则表达式来进行匹配,只有满足了匹配规则的,才会调用对应的视图函数执行。

2、使用path捕获url中值示例

任务:访问http://127.0.0.1:8000/study/13,页面返回study后的数字13。
(1)配置主路由

path("study/",include("apps.study.urls")),

(2)配置子路由

path('', views.detail),


(3)编写视图函数

def detail(request,x):
    return HttpResponse(x)


关键字参数必须和形参一致。
(4)访问

3、使用re_path捕获url中值示例

使用re_path捕获url中的值,有位置参数和命名参数(关键字参数)两种:

位置参数

这种信息的获取的方式是在URLConf中,使用()符号把里面需要的内容截取出来。
使用re_path在d+应用小括号(d+),视图函数必须接受参数。
(1)配置子路由

re_path(r'^test/(d+)$',views.newdetail), #r防止字符转义,表示非转义的原始字符


(d+)括号,不表示括号本身,表示获取的意思。
(d+),这样写,才表示括号本身。

(2)编写视图函数
视图函数必须接受url的位置参数。

def newdetail(request,id):
    return HttpResponse(id)

(3)测试
希望 newdetail执行,该怎么写请求?

位置参数练习

通过url传递3个整数,在页面上输出3个整数的值。

re_path(r'^(d+)/(d+)/(d+)/$',views.detail3), #位置参数
def detail3(request,p1,p2,p3):
    info = "p1={},p2={},p3={}".format(p1,p2,p3)
    return HttpResponse(info)

url的命名参数(关键字参数)

位置参数有时候并不能很好的描述用户意图,所以Django也提供在匹配URL时对截取信息进行命名参数的传递,采用的方法就是用?P<名称>符号来进行名称命名。

关键字参数:在小括号中(?P<变量名>),P是大写。

在url中传递一个整数,使用关键字参数实现如下:

(1)配置子路由

re_path(r'^keyword/(?Pd+)$',views.detail4),

注意名称必须和函数形参一致。

(2)编写视图函数

def detail4(request,book_id):
    return HttpResponse(book_id)

(3)访问

url的命名参数练习

通过url传递3个整数,使用命名参数在页面上输出3个整数的值。

re_path(r'^keyword/(?Pd+)/(?Pd+)/(?Pd+)/$',views.detail3),

注意名称必须和函数形参一致。2个路由匹配共同的detail3函数。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923947.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号