一尘不染

Django:如何重定向帖子并传递帖子数据

django

在Django views.py文件中处理POST请求时,有时需要将其重定向到另一个URL。我重定向到的网址是由同一Django views.py文件中的另一个函数处理的。有办法做到这一点并维护原始POST数据吗?

更新:我为什么要这样做的更多解释。我有两个Web应用程序(我们称它们为AppA和AppB),它们接受用户在文本字段中输入的数据。当用户单击提交时,将处理数据并显示详细结果。AppA和AppB需要不同类型的数据。有时用户错误地将AppB类型数据发布到AppA。发生这种情况时,我想将它们重定向到AppB并显示AppB结果,或者至少用他们输入AppA的数据填充它。

也:

  • 客户需要两个单独的应用程序,而不是将它们组合为一个。

  • 我无法显示代码,因为它属于客户端。

更新2:我认为在这里,KISS是最好的原则。我将这两个应用程序组合在一起,使事情变得更简单,更强大。我应该能够说服客户,这也是最好的方法。感谢你的宝贵意见。如果我要按所述维护两个应用程序,那么我认为会议将是实现此目的的方式-感谢Matthew J Morrison提出的建议。感谢Dzida的意见,使我开始思考设计和简化。


阅读 407

收藏
2020-03-26

共2个答案

一尘不染

如果你遇到此类问题,那么你可能需要修改设计的机会很小。

这是HTTP的限制,POST数据不能与重定向一起使用。

你能否描述你要完成的工作,然后我们可以考虑一些巧妙的解决方案。

如果你不希望按照Matthew的建议使用会话,则可以将GET中的POST参数传递到新页面(考虑一些限制,例如安全性和查询字符串中GET参数的最大长度)。

更新你的更新:)对于你有2个Web应用程序,而这些应用程序使用一个views.py(对吗?),这听起来让我感到奇怪。无论如何,请考虑将数据从GET中的POST传递到正确的视图(以防数据当然不敏感)。

2020-03-26
一尘不染

我认为如何处理这种情况将是在会话中保存帖子数据,然后在不再需要它时将其删除。这样,即使该帖子消失了,我也可以在重定向后访问原始帖子数据。

这对你想要的工作有用吗?

这是我建议的代码示例:(请记住,这是未经测试的代码)

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

请记住另一件事…如果你正在执行此操作并且还上传了文件,则我不会这样做。

2020-03-26