Django中的HttpResponseRedirect函数是用于URL重定向或URL转发的目的。重定向有很多用途,比如在维护窗口期间重定向用户,在互联网上为一个网页提供多个URL地址,或者用于配置永久重定向,以维护已经存在的链接和书签。通常,重定向用于HTTP、HTTPS和FTP协议,状态代码为302,用于执行这一操作。让我们在我们的Django应用程序中添加一个HttpResponseRedirect的实例,看看它是如何工作的。
两个URL一个网页
在我们的应用程序中,URL重定向的一个例子是为用户提供查看每日、每周或每月的目标,使用这些字符串或作为一个选项,使用整数值。因此,目标是为三个网页中的每一个都有两个URL,像这样。
daily goals
127.0.0.1:8000/goals/daily
127.0.0.1:8000/goals/1
weekly goals
127.0.0.1:8000/goals/weekly
127.0.0.1:8000/goals/2
daily goals
127.0.0.1:8000/goals/monthly
127.0.0.1:8000/goals/3
两个路线选项
第一步是在urls.py的URLconf中提供两个不同的路由。一个路由将匹配一个基于整数的时间框架,另一个将匹配一个基于字符串的时间框架。
C:\python\djangoprojects\myproject\goals\urls.py
from django.urls import path
from . import views
urlpatterns = [
path('<int:timeframe>', views.goals_by_int_timeframe),
path('<str:timeframe>', views.goals_by_timeframe),
]
导入HttpResponseRedirect
为了使用HttpResponseRedirect,我们首先需要在view.py的顶部导入它。
C:\python\djangoprojects\myproject\goals\views.py
from django.shortcuts import redirect, render
from django.http import HttpResponse, HttpResponseRedirect
在一个函数中使用HttpResponseRedirect
我们可以在view.py中添加一个新的函数,处理任何与urls.py配置中基于整数的时间框架相匹配的GET请求。然后,我们使用基本的Python将整数值映射到一个字典中的一个键上,这个字典保存了每日、每周和每月的目标。然后,我们利用HttpResponseRedirect将127.0.0.1:8000/goals/1的URL重定向到http://127.0.0.1:8000/goals/daily, 127.0.0.1:8000/goals/2重定向到http://127.0.0.1:8000/goals/weekly,而127.0.0.1:8000/goals/3重定向到http://127.0.0.1:8000/goals/monthly。
from django.shortcuts import redirect, render
from django.http import HttpResponse, HttpResponseRedirect
# dictionary data store
goals = {
'daily': 'Learn Something New',
'weekly': 'Take a day off',
'monthly': 'Complete a creative course'
}
def goals_by_int_timeframe(request, timeframe):
timeframes = list(goals.keys())
redirect_to = timeframes[timeframe - 1]
return HttpResponseRedirect('/goals/' + redirect_to)
def goals_by_timeframe(request, timeframe):
goal = goals[timeframe]
return HttpResponse(goal)
访问127.0.0.1:8000/goals/1的地址现在产生了一个立即的302重定向到http://127.0.0.1:8000/goals/daily,它给出了一个200 OK响应。
如何在Django中使用HttpResponseRedirect摘要
我们现在对Django中的请求、响应和重定向有了很好的掌握。这个小程序利用路径转换器来处理URL模式中的int和字符串,然后根据捕获的值是int还是str,使用逻辑来处理每个请求。我们使用Django的HttpResponseRedirect函数将基于整数的请求转发到它们相关的基于字符串的URL上。