路由是URL地址与处理逻辑(视图函数)的对应关系。
本质:将用户请求的URL路径映射到具体的处理程序(如Django视图函数)。
示例:
# urls.py
urlpatterns = [
path('home/', views.home_view), # URL路径"home/" → home_view函数
]
当用户访问http://域名/home/时,自动触发home_view函数处理请求。
动态路由通过URL参数传递数据,支持正则表达式灵活匹配路径
参数捕获:
# 捕获数字参数
path('user//', views.user_detail),
# 正则匹配(复杂场景)
re_path(r'users(\w+)/', views.users)
re_path(r'^articles/(?P[0-9]{4})/$', views.article_year),
访问/user/123/时,user_id=123传递给视图函数。
正则表达式作用:
约束参数格式(如限定4位年份)
精细化路径匹配规则
大型项目需拆分路由到多个App,通过include实现模块化管理
操作步骤:
# 主urls.py
urlpatterns = [
path('blog/', include('blog.urls')), # 子路由:blog App
path('shop/', include('shop.urls')), # 子路由:shop App
]
# blog/urls.py
urlpatterns = [
path('list/', views.blog_list),
]
①访问/blog/list/时,由blogApp的blog_list视图处理
②核心优势
解决多App路由命名冲突问题,支持反向解析URL
为路由定义唯一别名,反向生成URL:
# 定义
path('about/', views.about, name='about_page'),
# 一般会有以下两处会用到
# 1.模板中反向生成url (.html文件中)
关于我们
# 2.在视图函数中生成URL
from django.urls import reverse
url = reverse("about_page")
(2)Namespace(命名空间)
区分不同App的同名路由:
from django.urls import path, re_path, include
# 主路由
urlpatterns = [
path('api/', include("apps.api.urls",namespace='a1')),
path('web/', include("apps.web.urls",namespace='w1')),
]
from django.urls import path, re_path
from . import views
# 子路由:api/urls.py
urlpatterns = [
path('login/', views.login,name="login"),
path('auth/', views.auth, name='auth'),
]
from django.urls import path, re_path
from . import views
# 子路由:web/urls.py
urlpatterns = [
path('home/', views.home,name='home'),
path('order/', views.order,name='order'),
path('auth/', views.order, name='auth'),
]
# 在某个URL或者视图中反向生成:
from django.urls import reverse
url = reverse("a1:login")
url = reverse("w1:home")
url = reverse("a1:auth")
url = reverse("w1:auth")
# 主路由
urlpatterns = [
path('api/', include("apps.api.urls", namespace='a1')),
]
from django.urls import path, re_path
from apps.api import views
# 子路由:api/urls.py
urlpatterns = [
path('login/', views.login, name="login"),
path('auth/', views.auth, name='auth'),
]
app_name = "api"
概念 | 作用 | 典型场景 |
基本路由关系 | URL → 视图映射 | 简单页面跳转 |
动态路由(正则) | 参数传递与格式约束 | 用户详情页、分类过滤 |
路由分发(include) | 模块化管理多App路由 | 大型项目分层开发 |
Name与Namespace | 反向解析URL + 避免命名冲突 | 多App协作、模板链接生成 |
路由系统通过路径匹配与参数处理,实现Web请求的精准分发与管理