当前位置:首页 > Web开发 > 正文

如果项目中很多地方使用了该路径

2024-03-31 Web开发

Django的urls(路由)

urls.py素质上就是一个标准的python文件

这个python文件的感化就是在URL请求和措置惩罚惩罚该请求的视图函数之间成立一个对应关系

换句话说,它就是一个url请求映射表。

urls.py根基配置格局:

from django.conf.urls import url # 由一条条映射关系构成的urlpatterns这个列表称之为路由表 urlpatterns = [ url(regex正则表达式, views视图函数,参数kwatgs=None,别号name=None), #url素质就是一个函数 ]

参数说明

regex正则表达式:正则表达式,用来匹配url地点的路径部分,暗示视图前缀,视图前缀可以为空

views视图:一个可挪用东西,,凡是为一个视图函数,用来措置惩罚惩罚业务逻辑

参数kwatgs:可选的要通报给视图函数的默认参数(字典形式)(可用在有名分组)

别号name:一个可选的name参数(可用在反向解析)

django 2.0版本的路由系统

2.0版本中re_path和1.11版本的url是一样的用法

from django.urls import path,re_path urlpatterns = [ path('articles/2003/', views.special_case_2003), ]


正则表达式详解

根基配置

from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), url(r'^articles/([0-9]{4})/$', views.year_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), ]

注意事项:

urlpatterns中的元素凭据书写挨次从上往下逐一匹配正则表达式,一旦匹配告成则不再继续。

若要从URL中捕获一个值,只需要在它周围安排一对圆括号(分组匹配)。

不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。

每个正则表达式前面的‘r‘ 是可选的但是建议加上。

增补说明:

是否开启URL访谒地点后面不为/跳转至带有/的路径的配置项:APPEND_SLASH=True

Django settings.py配置文件中默认没有 APPEND_SLASH 这个参数,但 Django 默认这个参数为 APPEND_SLASH = True/False,其感化就是自动在网址结尾加‘/‘


路由匹配(分组匹配)

分组:就是给一段正则表达式加括号

在Python的正则表达式中,分组定名正则表达式组的语法是(?P<name>pattern),此中name是组的名称,pattern是要匹配的模式。

无名分组

在路由匹配的时候,给某段正则表达式加了括号

匹配的时候会将括号内正则表达式匹配到的内容当 做位置参数通报给对应的视图函数

urls.py路由

from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), # 下述正则表达式会匹配url地点的路径部分为:article/数字/,匹配告成的分组部分会以位置参数的形式传给视图函数,有几个分组就传几个位置参数 url(r'^aritcle/(\d+)/$',views.article), ]

views.py视图函数

from django.shortcuts import render, HttpResponse # 需要特别增加一个形参用于接收通报过来的分组数据 def article(request,article_id): return HttpResponse('id为 %s 的文章内容...' %article_id)

测试:

在浏览器输入::8001/article/3/ 会看到: id为 3 的文章内容... 有名分组

给一段正则表达式起一个别号

匹配的时候会将括号内的正则表达式的内容,看成关键字参数传给对应的视图函数

urls.py路由

from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), # 该正则会匹配url地点的路径部分为:article/数字/,匹配告成的分组部分会以关键字参数(article_id=匹配告成的数字)的形式传给视图函数,有几个有名分组就会传几个关键字参数 url(r'^aritcle/(?P<article_id>\d+)/$',views.article), ]

views.py视图函数

from django.shortcuts import render, HttpResponse # 需要特别增加一个形参,形参名必需为article_id def article(request,article_id): return HttpResponse('id为 %s 的文章内容...' %article_id)

测试:

在浏览器输入::8001/article/3/ 会看到: id为 3 的文章内容...

总结:有名分组和无名分组都是为了获取路径中的参数,并通报给视图函数,区别在于无名分组是以位置参数的形式通报,有名分组是以关键字参数的形式通报。

增补:

无名分组和有名分组不能混合使用

虽然不能混合使用 但是同一种定名方法 可以使用多个

反向解析

通过别号获取路径的过程称为反向解析

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32116.html