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')
在上述示例中,arg1
和arg2
是目标视图接受的参数,这些参数将作为查询字符串附加到重定向的URL中。
在django中还有一个重定向类RedirectView
类
RedirectView
类和redirect()
函数都可以用于实现视图重定向,但它们之间有一些不同之处:
-
类 vs 函数:
RedirectView
是一个基于类的视图,需要在URL配置中使用as_view()
方法将其转换为可调用的视图函数。而redirect()
函数是一个函数,可以直接在视图函数中使用。 -
配置方式:
RedirectView
通过URL配置来定义重定向,需要在urls.py
文件中指定URL模式。而redirect()
函数是在视图函数内部调用,可以在视图函数中灵活地执行重定向。 -
额外功能:
RedirectView
提供了更多的属性和方法来自定义重定向逻辑,比如permanent
属性用于指定重定向类型(永久或临时),get_redirect_url()
方法用于自定义目标URL的生成逻辑等。相比之下,redirect()
函数相对简单,主要用于执行简单的重定向。 -
参数传递:
RedirectView
允许在URL配置中直接指定目标URL,也可以通过重写get_redirect_url()
方法来动态生成目标URL。而redirect()
函数允许将目标URL作为参数传递,也可以传递额外的参数和查询字符串。
综上所述,RedirectView
类适用于需要更多灵活性和自定义功能的重定向场景,而redirect()
函数适用于简单的重定向需求,而HttpResponseRedirect一般只用于完整URL的重定向。