如何使用发布数据重定向(Django)

新手上路,请多包涵

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

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

还:

  • 客户想要两个独立的应用程序,而不是将它们组合成一个。

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

更新 2:我认为 KISS 是这里最好的原则。我将这两个应用程序合二为一,使事情变得更简单、更强大;我应该能够说服客户这也是最好的方法。感谢所有的好评。如果我要按照描述维护两个应用程序,那么我认为会话将是实现此目的的方法——感谢 Matthew J Morrison 的建议。感谢 Dzida,他的评论让我开始思考设计和简化问题。

原文由 FunLovinCoder 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 744
2 个回答

如果您遇到这样的问题,您可能需要修改设计。

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

你能描述一下你想要完成什么吗,也许我们可以考虑一些巧妙的解决方案。

如果您不想像 Matthew 建议的那样使用会话,您可以将 GET 中的 POST 参数传递给新页面(考虑一些限制,例如安全性和查询字符串中 GET 参数的最大长度)。

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

原文由 dzida 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

这对你想做的事情有用吗?

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

 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

要记住的另一件事……如果你这样做并上传文件,我不会这样做。

原文由 Matthew J Morrison 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题