Django 重定向 | 重定向完整指南

17 Mar 2025 | 6 分钟阅读

在本教程中,我们将学习重要的 Django 概念之一:重定向。 我们将了解 Django 重定向及其用途。 我们还将看到重定向的示例,并将讨论永久和临时重定向。 我们假设您已经熟悉 Django 的基本构建概念,例如视图、模型和 URL 模式。 如果您不熟悉 Django,请访问我们的 Django 教程

什么是重定向?

当使用 Django 框架创建 Web 应用程序时,我们将在某个时刻需要将一个 URL 访问到另一个 URL。 我们可以通过在 Django 的视图中从我们的视图返回 HttpResponseRedirectHttpResponseRedirect 的实例,轻松地从当前 URL 跳转到另一个 URL。 我们需要在我们的 view.py 文件中使用 django.shortcuts 模块导入 redirect 函数。 让我们看下面的例子。

示例 - view.py

在上面的 view.py 文件中, 我们导入 redirect() 函数并使用视图中的 URL 调用它。 它将返回 HttpResponseRedirect 类,然后我们从我们的视图中返回它。

这个 redirect_view 必须包含在 url.py 文件中。

假设这是我们 Django 项目的主要 url.py 文件;URL /redirects/ 现在将重定向到 /redirect-success/。

还有另一种重定向 URL 的方法。 我们可以使用带有视图或 URL 名称的 redirect() 函数来避免硬编码样式。

重定向有什么用?

有人可能想知道我们在重定向 URL 时为什么使用重定向。 要了解重定向的意义所在,请阅读有关重定向的以下重要要点。

  • 当用户未登录并请求需要身份验证的 URL 以将用户重定向到登录页面时,重定向非常有用。
  • 当用户成功登录时,Django 会将用户重定向到原始请求。
  • 当用户更改密码时,我们可以将页面重定向到显示密码已成功更改的页面。

当您在 Django 管理员中创建一个对象时,Django 会将您重定向到对象列表。

除此之外,Django 重定向在通过 Web 应用程序为用户提供方向方面起着至关重要的作用。 执行创建或删除对象等操作可能会给应用程序带来一些不便。 使用重定向可以防止意外操作两次。

重定向的表单处理示例

在下面的示例中,当用户成功提交表单时,我们将在表单处理中使用 redirect() 函数。 让我们了解以下代码。

示例 -

上面的代码将显示并处理联系表单。 我们也可以将数据发送到模板文件。 让我们详细了解代码。

  • 首先,我们导入了表单模块,并创建了一个包含一些字段的表单。
  • 然后,我们创建了 contant_handle_form() 函数来处理表单。
  • 该视图查看请求方法。 当用户输入连接到视图的 URL 时,浏览器会执行 GET 操作。 基本上 GET 请求为用户提供数据。
  • 我们检查请求是否为 POST, 我们实例化一个 ContactForm
  • 如果表单有效,我们使用 cleaned_data 清理输入数据
  • 保存数据后,视图会重定向到 URL /success/。 这是我们关注的步骤。
  • 在下一步中,我们传递 ContactForm 的实例并使用 django.shortcuts.render() 渲染 html 模板。

注意 - 在 Django 中,表单是在 forms.py 中创建的,但我们在 view.py 文件中创建表单以演示如何处理表单。

HTTP 重定向的工作原理是什么?

现在,问题来了,HTTP 重定向如何工作。 在本节中,我们将学习当用户在他们的浏览器地址栏中输入 URL 时会发生什么。

假设我们创建了一个 Django 应用程序,其中包含处理路径 /hello/ 的 “HelloWorld” 视图。 当我们在服务器上运行 Web 应用程序时,完整的 URL 将是 http://127.0.0.1:8000/hello/。

在 URL 中,127.0.0.1 是 IP 地址,8000 是一个端口。 我们发送对路径 /hello/ 的 GET 请求。 服务器返回 HTTP 响应。

我们可以使用带有 -include 选项的 curl 命令来查看客户端和服务器的活动。

在第一行中,HTTP 响应返回状态代码 200 和状态消息。 状态行后跟任意数量的 HTTP 标头。

临时重定向与永久重定向

重定向有两种类型 - 临时和永久。 状态代码 301 表示永久重定向和 302 找到。 找到表示临时重定向,这意味着“您正在寻找的 URL 当前可以在另一个地址找到。” 这与 “我们的商店目前已关闭。 请访问其他商店” 相同。

永久重定向表示 “您正在寻找的 URL 无法再在此地址找到。 它在新地址上可用。” 永久 URL 会永久更改。

浏览器将 URL 响应保存在缓存中。 下次用户输入相同的 URL 时,浏览器会记住重定向并将请求重定向到新地址。

永久和临时 URL 与搜索引擎优化相关。

redirect() 函数

我们之前已经展示了 redirect() 函数的用法。 我们可以使用 get_absolute_url() 方法、URL 或视图名称以及位置和/或关键字参数来调用此方法。

要制作永久 URL,我们需要传递参数 permanent=True, 它将返回 HttpResponsePermanentRedirect 的实例。

示例 -

redirect() 函数会将任何字符串 a /or . 视为 URL,并将其用作重定向目标。

RedirectView 基于类的视图

假设我们有一个视图,除了返回重定向外没有任何用处。 在这种情况下,我们可以使用基于类的视图 django.view.generic.base.RedirectView.

在下面的示例中,字符串格式占位符与 URL 中的命名参数互换。

示例 - view.py

示例 - urls.py

URL 使用 <term> 定义,这将有助于构建重定向。 假设我们搜索 Tom Hardy, 路径将是 https://google.com/?q=TomHardy。 我们将关键字参数 url 传递给 as_view() in urlpatterns。

urls.py

我们可以通过覆盖 get_redirect_url() 方法来创建动态 URL。

view.py

上面的基于类的视图将重定向到从 .actor_urls. 随机选择的 URL。

结论

本教程包括 Django 的 HTTP 重定向指南。 我们探索了重定向的每个重要概念,从 HTTP 协议的低级细节到高级细节。 我们解释了永久和临时重定向,基于类的重定向。 此外,关于重定向的知识不仅限于 Django 框架; 它可以用于任何语言的 Web 开发。


下一个主题Django on_delete