首页 > 行业资讯 > Django教程-重定向

Django教程-重定向

时间:2023-08-17 来源: 浏览:

Django教程-重定向

点击关注 Python架构师
Python架构师

gh_1d7504e4dee1

回复:python,领取Python面试题。分享Python教程,Python架构师教程,Python爬虫,Python编程视频,Python脚本,Pycharm教程,Python微服务架构,Python分布式架构,Pycharm注册码。

收录于合集
#django 21
#Django开源项目 32
#Django教程 31
#python web教程 40
#python教程 129
整理: python架构师

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

什么是重定向?

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

示例 - view.py

# views.py from django.shortcuts import redirect def redirect_view (request) : response = redirect( ’/redirect-success/’ ) return response

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

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

# urls.py from django.urls import path from .views import redirect_view urlpatterns = [ path( ’/redirect/’ , redirect_view) ]

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

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

资源分享

点击领取:最全Python资料合集

为什么重定向有用?

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

  • 当用户未登录并请求需要身份验证的 URL 将用户重定向到登录页面时,重定向非常有用。

  • 当用户成功登录时,Django 将用户重定向到原始请求。

  • 当用户更改密码时,我们可以重定向显示密码更改成功的页面。

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

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

表单处理重定向示例

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

例子 -

from django import forms from django.http import HttpResponseRedirect from django.shortcuts import redirect, render class ContactForm (forms.Form) : name = forms.CharField() email = forms.EmailField() mobile = forms.CharField() message = forms.CharField(widget=forms.Textarea) def contact_form_handle (request) : if request.method == ’GET’ : form = ContactForm() # The request method ’POST’ indicates # that the form was submitted if request.method == ’POST’ : # 1 # We are creating a form instanse to save the form data form = ContactForm(request.POST) # 2 # Validate the form if form.is_valid(): # if the submitted data is valid # the perform the following operations name = form.cleaned_data[ ’name’ ], email = form.cleaned_data[ ’email’ ], mobile = form.cleaned_data[ ’mobile’ ], message = form.cleaned_data[ ’message’ ] form.save() # When the operation is successful, it redirects to another web page. return redirect( ’/success/’ ) return render(request, ’contact_form.html’ , { ’form’ : form})

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

  • 首先,我们导入了表单模块,并创建了一个包含一些字段的表单。

  • 然后,我们创建了处理表单的contant_handle_form()函数。

  • 该视图查看请求方法。当用户输入连接查看的URL时,浏览器执行GET操作。基本上 GET 请求将数据提供给用户。

  • 我们检查请求是否是POST,我们实例化一个ContactForm

  • 如果表单有效,我们使用 clean_data 清理输入数据

  • 保存数据后,视图返回重定向到 URL /success/。这是我们关心的步骤。

  • 在下一步中,我们传递 ContactForm 的实例并使用 django.shortcuts.render() 渲染html模板。

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

HTTP 重定向如何工作?

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

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

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

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

$ curl --include http://127.0.0.1:8000/hello/ HTTP/1.1 200 OK Date: Sun, 09 Jul 2021 02:32:55 GMT Server: WSGIServer/0.2 CPython/3.6.3 Content-Type: text/html; charset=utf-8 X-Frame-Options: SAMEORIGIN Content-Length: 11   Hello World  

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

临时重定向与永久重定向

重定向有两种类型 - 临时和永久。状态码 301 表示永久重定向,302 表示已找到。发现表示临时重定向,这意味着“您当前正在查找的 URL 可以在另一个地址中找到”。相当于“本店已暂停营业,请前往其他店”。

永久重定向表示“您正在查找的 URL 在此地址不再可用。它在新地址上可用。” 永久 URL 使更改永久生效。

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

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

重定向()函数

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

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

例子 -

from django.shortcuts import redirect def post_view (request) : return redirect( ’/home/42/’ )

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

RedirectView 基于类的视图

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

在以下示例中,字符串格式占位符与 URL 中的命名参数进行交换。

示例 - view.py

from django.views.generic.base import RedirectView class SearchRedirectView (RedirectView) : url = ’https://google.com/?q=%(term)s’

示例 - urls.py

from django.urls import path from .views import SearchRedirectView urlpatterns = [ path( ’/search/<term>/’ , SearchRedirectView.as_view()) ]

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

urls.py

from django.views.generic.base import RedirectView urlpatterns = [ path( ’/search/<term>/’ , RedirectView.as_view(url= ’https://google.com/?q=%(term)s’ )), ]

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

视图.py

from random import choice from django.views.generic.base import RedirectView class RandomAnimalView (RedirectView) : actor_urls = [ ’/Chrisevance/’ , ’/Tomhardy/’ , ’/RobertAtinkson/’ ] is_permanent = True def get_redirect_url (*args, **kwargs) : return choice(self.actor_urls)

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

结论

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

 
热门推荐
  • Django教程-DjangoCRUD(创建、读取、更新、删除)

  • 40岁的程序员,期望税前3.5w左右,能找到工作吗?网友:放心,找不到的!

  • Django教程-管理后台

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐