如何在Django中使用HttpResponseRedirect?

81 阅读2分钟

HttpResponseRedirect In Django

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 302 status code

如何在Django中使用HttpResponseRedirect摘要

我们现在对Django中的请求、响应和重定向有了很好的掌握。这个小程序利用路径转换器来处理URL模式中的int和字符串,然后根据捕获的值是int还是str,使用逻辑来处理每个请求。我们使用Django的HttpResponseRedirect函数将基于整数的请求转发到它们相关的基于字符串的URL上。