Django路由配置-快速上手

Django路由系统配置代码在urls.py中,该文件在创建项目时自动生成,一般在项目目录下。

路由系统URL基本格式

在urls.py文件中配置的路由,都存放在一个名为urlpatterns的变量中,这个变量是列表类型

from django.contrib import admin
#从django.contrib模块中导入admin函数,这个函数加载DjangoAdmin管理后台的URL。
from django.urls import path
#从django.urls模块中导入include()和path()两个函数。
#include()用于导入另一个URL配置文件;
#path()使用正则表达式匹配浏览器中的URL,把它映射到视图函数上。

#urlpatterns 中的每一个列表项就是一条对应关系(URL与视图函数的对应关系),这种对应关系称作URL配置(URLconf)。
urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/', include('xxxx.urls')),
    path('test/<int:id>', views.test),
]

path (URL正则表达式,视图函数,参数,别名),

path()中的第一个参数称为URL正则表达式,它是字符串形式。

第二个参数是视图函数名,第一个参数和第二个参数是对应关系。

后面两个参数是可选的,第三个参数表示可以传给视图函数的额外的参数,参数是字典类型

第四个参数给这个对应关系列表项的URL起了别名,使程序可以按名字调用这个配置项。

path()的URL参数

path('test/<int:id>', test)
path()函数的第一个参数的角括号里的内容,称作URL参数。
URL参数冒号左边为参数数据类型,右边为参数名称,如<int:id>表示的参数名称为id,数据类型为int。

URL参数主要有以下数据类型:

str:匹配的任意非空字符串,但不包括分隔符“/”。

int:匹配0或任意正整数。●slug:匹配字母、数字、短横线、下划线组成的字符串。

uuid:匹配一个格式化的UUID(Univerally Unique Identifier,通用唯一识别码),UUID是由数字、小写字母、破折号等组成的唯一识别码。

path:匹配任意非空字符串,包含分隔符“/”。

re_path()函数

re_path()函数中URL正则表达式中的URL参数用的是命名式分组语法

re_path(data1/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/', views.test),

re_path()中URL参数year通过[0-9]{4}这个正则表达式来严格匹配4位的整数,month通过[0-9]{2}这个正则表达式来严格匹配2位的整数。

一个括号就是一个分组,一个分组有一个参数,因为是命名式分组,所以传给视图函数的也是命名参数。

路由分发

from django.urls import path,include
urlpatterns = [
	path('myapp/',include('myapp.urls')),
]

路由分发使用的是include()方法,需要提前导入相应的模块path和include。

include()括号内的字符串要用引号括起来,参数是导入的其他配置模块(文件),它表示的是导入的模块的路径字符串,路径以圆点分割。

建立二级路由

from django.urls import path,include
urlpatterns = [
	path('test/',views.test),
]

二级路由配置建立后,对应关系变成了一级路由和二级路由串联起来与视图函数的对应。

如“path(‘test/’, views.test),”的实际对应关系变成“path(‘myapp/test/’, views.test),”的对应关系。

路由命名空间

多个应用程序使用相同的名称也可以通过命名空间把它们区分开。

from django.urls import path,include
urlpatterns = [
# 通过include()函数导入二级配置模块,并设置命名空间
path ('app1/', include('app1.urls', namespace='app1')),
path ('app2/', include('app2.urls', namespace='app2')),
]

#app01中的urls.py(二级配置文件),代码如下。
from django.urls import path,include
from app1 import views
# 指定命名空间
app_name = 'app01'
urlpatterns = [
# 给配置项命名为test
    path('test/', views.test, name='test')
]
app02中的urls.py(二级配置文件),代码如下。
from django.urls import path,include
from app2 import views
app_name = 'app02'
urlpatterns = [
    # 给配置项命名为test
    path('test/', views.test, name='test')
]

两个应用程序的URL名称重复

我们反向解析URL的时候就可以通过命名空间的名称得到正确的URL

{% url 'app01:test' %}

在views中的函数中使用以下代码反向解析

v = reverse('app01:test')