在处理Django views.py文件中的POST请求时,我有时需要将其重定向到另一个url。我重定向到的这个url是由同一个Django views.py文件中的另一个函数处理的。
我有两个web应用程序(让我们称它们为AppA和AppB),它们接受用户在文本字段中输入的数据。AppA和AppB需要不同类型的数据。当发生这种情况时,我希望将它们重定向到AppB并显示AppB结果,或者至少用他们输入到AppA中的数据填充结果。
另外:
更新2:我认为KISS是这里最好的原则。我已经将这两个应用程序合并为一个,这使得事情变得更简单和更健壮;我应该能够说服客户这也是最好的方法。谢谢你所有的反馈。如果我要像上面描述的那样维护两个应用程序,那么我认为会话将是实现这一点的方法-感谢Matthew J Morrison的建议。感谢Dzida,他的评论让我开始思考设计和简化。
发布于 2010-06-12 00:37:39
如果你遇到这样的问题,你可能需要修改你的设计。
这是的一个限制,POST数据不能与重定向一起使用。
你能描述一下你试图实现的目标吗?也许我们可以想出一些巧妙的解决方案。
如果你不想像Matthew建议的那样使用会话,你可以在GET中传递POST参数到新页面(考虑一些限制,比如安全性和查询字符串中GET参数的最大长度)。
更新你的更新:)你有两个web应用程序,而这些应用程序使用一个views.py,这对我来说很奇怪(我说的对吗?)无论如何,请考虑将数据从POST传递到正确的视图(当然,以防数据不敏感)。
发布于 2010-06-11 23:49:28
我认为我可能会如何处理这种情况,将post数据保存在会话中,然后在不再需要它时将其删除。这样我就可以在重定向后访问原始的帖子数据,即使那个帖子已经消失了。
这会对你想做的事情起作用吗?
以下是我所建议的代码示例:(请记住,这是未经测试的代码)
def some_view(request):
#do some stuff
request.session['_old_post'] = request.POST
return HttpResponseRedirect('next_view')
def next_view(request):
old_post = request.session.get('_old_post')
#do some stuff using old_post
还有一件事要记住..。如果你这样做的同时也在上传文件,我不会这样做。
发布于 2010-09-27 16:32:34
您需要使用HTTP 1.1 Temporary Redirect (307)。
不幸的是,Django redirect()
和HTTPResponseRedirect
(永久)只返回301或302。你必须自己去实现它:
from django.http import HttpResponse, iri_to_uri
class HttpResponseTemporaryRedirect(HttpResponse):
status_code = 307
def __init__(self, redirect_to):
HttpResponse.__init__(self)
self['Location'] = iri_to_uri(redirect_to)
另请参阅django.http module。
编辑:
在最近的Django版本中,将iri_to_uri
导入更改为:
from django.utils.encoding import iri_to_uri
https://stackoverflow.com/questions/3024168
复制相似问题