Django 路由系统用于将 URL 映射到相应的视图函数,从而确定在用户请求时应该执行哪些逻辑。以下是 Django 路由的基本概念和用法:

1. 创建 URL 映射: 在 Django 项目中,URL 映射通常存储在应用程序的 urls.py 文件中。你可以在这个文件中定义 URL 模式和对应的视图函数。
    from django.urls import path
    from . import views

    urlpatterns = [
        path('myview/', views.my_view, name='my-view'),
        path('greeting/<str:name>/', views.greeting, name='greeting'),
    ]

    在这个例子中,urlpatterns 列表包含了两个 URL 模式。第一个模式将 URL /myview/ 映射到 my_view 视图函数,第二个模式将 URL /greeting/John/ 中的 John 部分传递给 greeting 视图函数。

2. 包含其他应用程序的 URL 配置: 你可以通过 include 函数包含其他应用程序的 URL 配置,以构建更大的路由表。
    from django.urls import include, path

    urlpatterns = [
        path('app/', include('myapp.urls')),
    ]

    在这个例子中,include 函数将应用程序 myapp 的路由表包含到主路由表中,使得 /app/ 下的所有 URL 都由 myapp 应用程序处理。

3. 命名 URL 模式: 使用 name 参数为 URL 模式命名,以便在模板中使用 {% url %} 模板标签。
    path('myview/', views.my_view, name='my-view')

    在这个例子中,name='my-view' 允许你在模板中使用 {% url 'my-view' %} 来生成对应的 URL。

4. 正则表达式: Django 路由允许使用正则表达式进行更灵活的 URL 匹配。
    from django.urls import re_path

    urlpatterns = [
        re_path(r'^article/(\d+)/$', views.article_detail),
    ]

    在这个例子中,re_path 允许使用正则表达式 r'^article/(\d+)/$' 匹配形如 /article/1/ 这样的 URL,并将匹配的数字作为参数传递给 article_detail 视图函数。

5. 应用命名空间: 当多个应用程序有相似的 URL 模式时,可以使用应用命名空间避免冲突。
    app_name = 'myapp'

    urlpatterns = [
        path('myview/', views.my_view, name='my-view'),
    ]

    在这个例子中,app_name = 'myapp' 允许你在模板中使用 {% url 'myapp:my-view' %}。

6. 视图装饰器和类视图: Django 支持使用装饰器和类视图来处理视图逻辑。你可以将装饰器应用于函数视图,或者使用基于类的视图。
    from django.views.decorators import login_required
    from django.views.generic import TemplateView

    urlpatterns = [
        path('protected/', login_required(views.protected_view)),
        path('about/', TemplateView.as_view(template_name='about.html')),
    ]

    在这个例子中,login_required 装饰器要求用户在访问 protected_view 视图时进行身份验证,而 TemplateView 类视图渲染了一个模板。

这只是 Django 路由系统的基本介绍。深入了解 Django 路由可以让你更好地组织和管理应用程序的 URL 结构,并将请求路由到相应的视图函数。


转载请注明出处:http://www.pingtaimeng.com/article/detail/13915/Django