我在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()函数解析。在
两种情况都不起作用
好吧,有几点可能会有帮助:
在多个浏览器中会发生这种情况吗?HTTP状态302是重定向的正确状态,可能您启用了一些调试模式/加载项,这会改变浏览器对此的处理方式?。
使用相对URL路径有什么原因吗?为什么不使用类似:
return redirect('/user_welcome')
看起来您是在Django发送自己的响应之前向响应输出文本。检查代码中是否有
print
语句-很可能您正在调用print,这在WSGI应用程序中永远不应该这样做。print的输出在Django应用程序的任何输出之前发送,因此被视为响应的开始。结果,Django发送的头将得到输出到主体。在我也遇到过类似的问题,最终找到了根本原因。在
无论使用什么重定向函数,都需要确保打印的输出是
如果没有结尾的两个换行符“\n\n”,您的重定向将在生产中不起作用(尽管它可以在开发服务器上工作)。在
关于Nick的评论:确实,您应该依赖于您的框架,而不是使用系统标准输出写入或者打印输出你自己的东西。然而,有些人喜欢清楚地(低层次)了解到底发生了什么,而构建自己的小CGI有时对于特定的需求是必要的。但正如Nick所说,同时混合打印和框架显然会导致重大问题:-)
相关问题 更多 >
编程相关推荐