Django 路由学习笔记

Django 路由(URLconf)是指将 URL 匹配到视图函数的过程。本文将介绍 Django 路由的基本概念和用法,并提供几个实例。

基本概念

在 Django 中,路由通过 urls.py 文件定义。每个应用都可以拥有自己的 urls.py 文件。在这个文件中,我们可以定义路由规则,将 URL 映射到相应的视图函数。

Django 的路由系统会按照 urlpatterns 列表中的定义顺序逐一匹配。当与某个模式匹配成功后,Django 会调用与该模式对应的视图函数来处理请求。如果所有模式都不匹配,则 Django 会返回一个 404 错误页面。

路由还可以传递参数给视图函数。这些参数可以是 URL 中的一部分,也可以是查询字符串(Query String)中的一部分。

基本用法

假设我们有一个名为 blog 的应用,现在我们要为它添加路由。首先,我们需要在应用的根目录下创建一个名为 urls.py 的文件。然后,在文件中添加如下内容:

pythonCopy Code
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('articles/', views.articles_list, name='articles_list'), path('articles/<int:article_id>/', views.article_detail, name='article_detail'), ]

这个文件定义了 3 个路由规则。第一个规则表示根路径('/')对应的视图函数是 index。第二个规则为路径 '/articles/',对应的视图函数是 articles_list。 第三个规则为路径 '/articles/<int:article_id>/',其中 <int:article_id> 是一个参数,表示一个整数类型的 id。这个规则对应的视图函数是 article_detail

然后,我们需要在应用的 views.py 文件中添加 indexarticles_listdetail 三个函数。

pythonCopy Code
from django.http import HttpResponse def index(request): return HttpResponse('Hello, world!') def articles_list(request): return HttpResponse('List of articles') def article_detail(request, article_id): return HttpResponse(f'Detail of article {article_id}')

这些视图函数接收请求对象作为参数,并返回一个 HttpResponse 对象。在上面的示例中,index 视图函数返回一个字符串 'Hello, world!'articles_list 视图函数返回一个字符串 'List of articles'article_detail 视图函数接收一个整型参数 article_id,并返回一个字符串,其中包含该参数的值。

至此,我们已经完成了 Django 的最基本的路由配置。你可以运行应用并访问相应的 URL 来测试这些功能。

示例

下面给出两个实际的应用场景。

示例 1:路由带有参数

在 Django 路由中,路由参数使用 <param_name> 的格式来定义。下面是一个带有参数的路由示例:

pythonCopy Code
from django.urls import path from . import views urlpatterns = [ path('greet/<str:name>/', views.greet, name='greet'), ]

这个路由定义了一个参数 name,表示需要向某个人打招呼。 然后,我们需要在应用的 views.py 文件中添加 greet 函数。

pythonCopy Code
from django.http import HttpResponse def greet(request, name): return HttpResponse(f'Hello, {name}!')

当你访问 http://yourdomain.com/greet/John/ 时,会返回字符串 'Hello, John!'

示例 2:重定向

有时候,我们可能需要将用户重定向到另一个 URL。可以使用 redirect 函数来实现这个功能。例如:

pythonCopy Code
from django.urls import path from django.shortcuts import redirect def redirect_to_blog(request): return redirect('/blog/') urlpatterns = [ path('', redirect_to_blog), path('blog/', include('blog.urls')), ]

在上面的示例中,redirect_to_blog 函数会将用户重定向到 /blog/ 的地址。然后,我们需要为 //blog/ 这两个路径分别配置路由,让它们指向相应的视图函数。

结论

Django 路由是 Django 框架的核心组件之一。本文希望对 Django 路由的基本概念和用法进行了简单的介绍。希望这篇文章能够对你在使用 Django 时有所帮助!