django中视图的重定向以及应用

django中视图的重定向以及应用

一、在Django中,我们可以使用视图重定向来将客户端显示的页面跳接到不同的URL。如我们现在要在现有的页面上(index1.html)中链接到:福建师范大学协和学院首页(cuc NO1),该如何实现呢?
1 在页面html文件红增加一个链接li(图1)
在这里插入图片描述
图 1 在原页面增加链接模块
在这里插入图片描述

图2

2 运行后观察点击该页面的cuc NO1 后显示的URL文件地址(图
2) ,此处因为服务端还未进行视图函数代码书写,页面暂时无法显示。此处测试主要观察浏览器上显示的URL地址
在这里插入图片描述 图 3

3

在views.py实现重定向(from django.shortcuts import HttpResponseRedirect
引入模块) 然后定义视图中的函数(图3)
在这里插入图片描述
图 3
在服务端的django架构中urls.py里添加对应的路径(图3-)和视图中的函数映射(图4)()图 4

完成以上步骤即可实现页面重定向到福建师范大学协和学院 首页

总之,在Django中,HttpResponseRedirect是一个类,用于执行视图重定向。它是django.http模块中的一部分
HttpResponseRedirect类的使用方式如下:

from django.http import HttpResponseRedirect

def my_view(request):
    # 函数其他业务功能

    # 创建一个HttpResponseRedirect对象并指定重定向的URL
    return HttpResponseRedirect('/another-url/')

HttpResponseRedirect接受一个参数/another-url/,即重定向的目标URL。在上述重定向到福建师范大学协和学院首页中,/another-url/参数即为'https://cuc.fjnu.edu.cn' 需要注意的是,HttpResponseRedirect需要提供完整的URL路径,包括协议、主机和路径。HttpResponseRedirect只能执行简单的重定向,它不支持传递额外的参数或查询字符串。如果需要在重定向时传递参数,建议使用redirect()`函数或在目标URL中使用查询字符串。

二、redirect()函数提供了更灵活和方便的重定向方法。

Django提供了一个方便的redirect()函数来实现重定向。下面是一个简单的示例:

from django.shortcuts import redirect

def my_view(request):
    # 函数其他功能...

    # 重定向到views.py中的另外一个函数
    return redirect('another_view_name')

当使用redirect()函数时,可以将目标视图的名称作为字符串传递给函数。以下是一个示例views.py 视图中的部分代码:

from django.shortcuts import redirect

def my_view(request):
    # 重定向到名为 "my_target_view" 的视图
    return redirect('my_target_view_name') # my_target_view_name是在urls.py里定义的path中name参数值

def my_target_view(request):
    # 目标视图的逻辑
    return HttpResponse("This is my target view")

在上述示例中,我们定义了一个名为my_view的视图函数。当用户访问my_view时,它将使用redirect()函数将用户重定向到名为my_target_view的视图。

在urls.py配置中,我们目标视图my_target_view提供一个对应的URL映射即可。

from django.urls import path
from my1 import views    # 从app应用my1中引入视图文件views

urlpatterns = [
    path('my-view/', my_view, name='my_view'),
    path('my-target-view/', my_target_view, name='my_target_view_name'),  #name='my_target_view_name与视图函数my_view中定义的要一致
]

在上述URL配置中,默认视图views中my_view函数将处理/my-view/路径的请求,而函数my_target_view将处理/my-target-view/路径的请求。

但是在访问/my-view/时,my_view视图函数因为使用redirect('my_target_view_name')将请求重定向到my_target_view_name对应的视图路径,即my_target_view。
如仍然以上面福建cuc NO1为例子,在图5中点击cuc NO2 时将重定向到cuc NO1对应的URL
在这里插入图片描述图5

views.py中的代码(图6)
在这里插入图片描述
图6 使用path 中name值 作为redirect()的参数
在这里插入图片描述图7 urls.py 中的path设置

以上例子实现了不同视图函数之间的 URL重定向

当然,可以和HttpResponseRedirect一样将目标URL直接传递给redirect()函数,而不是视图的名称:

from django.shortcuts import redirect

def my_view(request):
    # 执行一些逻辑...

    # 重定向到另一个URL
    return redirect('/another-url/')

此外,还可以使用命名参数来传递额外的参数:

from django.shortcuts import redirect

def my_view(request):
    # 函数其他功能...

    # 重定向到另一个URL,并传递额外的参数
    return redirect('another_view_name', arg1='value1', arg2='value2')

在上述示例中,arg1arg2是目标视图接受的参数,这些参数将作为查询字符串附加到重定向的URL中。

在django中还有一个重定向类RedirectView
RedirectView类和redirect()函数都可以用于实现视图重定向,但它们之间有一些不同之处:

  1. 类 vs 函数:RedirectView是一个基于类的视图,需要在URL配置中使用as_view()方法将其转换为可调用的视图函数。而redirect()函数是一个函数,可以直接在视图函数中使用。

  2. 配置方式:RedirectView通过URL配置来定义重定向,需要在urls.py文件中指定URL模式。而redirect()函数是在视图函数内部调用,可以在视图函数中灵活地执行重定向。

  3. 额外功能:RedirectView提供了更多的属性和方法来自定义重定向逻辑,比如permanent属性用于指定重定向类型(永久或临时),get_redirect_url()方法用于自定义目标URL的生成逻辑等。相比之下,redirect()函数相对简单,主要用于执行简单的重定向。

  4. 参数传递:RedirectView允许在URL配置中直接指定目标URL,也可以通过重写get_redirect_url()方法来动态生成目标URL。而redirect()函数允许将目标URL作为参数传递,也可以传递额外的参数和查询字符串。

综上所述,RedirectView类适用于需要更多灵活性和自定义功能的重定向场景,而redirect()函数适用于简单的重定向需求,而HttpResponseRedirect一般只用于完整URL的重定向。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值