重定向有问题吗

2024-10-01 09:38:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我在appengine中使用Django-nonrl,但是重定向有问题。在

我的视图处理程序中非常简单的重定向:

@login_required
def dashboard(request):

    if check_if_user_needs_to_import(request.user):

        return redirect("user_welcome")

未在App Engine中正确重定向,而是在浏览器中返回此消息:

状态:302找到Vary:Cookie内容类型:text/html;charset=utf-8位置:http://site.appspot.com/user/welcome/

如果我在浏览器中再次手动输入URL,它可以很好地加载。这似乎只在使用redirect()函数时才出现问题,任何使用render_to_response()的视图都可以正常工作。在

附加信息: 我已经尝试了redirect('name_of_view')—它将调用反向URL查找,也尝试了重定向('/path/to/URL/),它应该由django本机的redirect()函数解析。在

两种情况都不起作用


Tags: todjango函数视图url处理程序ifrequest
3条回答

好吧,有几点可能会有帮助:

  1. 在多个浏览器中会发生这种情况吗?HTTP状态302是重定向的正确状态,可能您启用了一些调试模式/加载项,这会改变浏览器对此的处理方式?。

  2. 使用相对URL路径有什么原因吗?为什么不使用类似:

return redirect('/user_welcome')

看起来您是在Django发送自己的响应之前向响应输出文本。检查代码中是否有print语句-很可能您正在调用print,这在WSGI应用程序中永远不应该这样做。print的输出在Django应用程序的任何输出之前发送,因此被视为响应的开始。结果,Django发送的头将得到输出到主体。在

我也遇到过类似的问题,最终找到了根本原因。在

无论使用什么重定向函数,都需要确保打印的输出是

"Status: 302 Found\nLocation: http://www.someurl.com\n\n"

如果没有结尾的两个换行符“\n\n”,您的重定向将在生产中不起作用(尽管它可以在开发服务器上工作)。在

关于Nick的评论:确实,您应该依赖于您的框架,而不是使用系统标准输出写入或者打印输出你自己的东西。然而,有些人喜欢清楚地(低层次)了解到底发生了什么,而构建自己的小CGI有时对于特定的需求是必要的。但正如Nick所说,同时混合打印和框架显然会导致重大问题:-)

相关问题 更多 >