1

我将 Django nonrel 与 App Engine 一起使用,并且遇到了重定向问题。

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

@login_required
def dashboard(request):

    if check_if_user_needs_to_import(request.user):

        return redirect("user_welcome")

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

状态:302 发现变化:Cookie 内容类型:文本/html;charset=utf-8 位置:http ://site.appspot.com/user/welcome/

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

附加信息:我已经尝试了重定向('name_of_view') - 这将调用反向 URL 查找以及重定向('/path/to/url/'),它应该由 redirect() 函数解决原生于django。

两种情况都不起作用

4

3 回答 3

3

在 Django 发送自己的响应之前,您似乎正在向响应中输出文本。检查你的代码中的print语句——你很可能调用了 print,你不应该在 WSGI 应用程序中这样做。print 的输出在 Django 应用程序的任何输出之前发送,因此被视为响应的开始。结果,由 Django 发送的标头将输出到正文。

于 2011-08-01T01:08:09.390 回答
0

好的,有几件事可能会有所帮助:

  1. 这是否发生在多个浏览器中?HTTP 状态 302 是重定向的正确状态,也许您启用了一些调试模式/插件,正在改变浏览器处理它的方式?

  2. 您使用相对 URL 路径是否有原因?为什么不使用类似的东西:

return redirect('/user_welcome')

于 2011-07-31T14:49:46.380 回答
0

我有一个类似的问题,终于找到了根本原因。

在您使用的任何重定向功能中,您需要确保打印输出的格式为

“状态:找到 302\n位置:http: //www.someurl.com \n\n”

如果最后没有两个换行符“\n\n”,您的重定向将无法在生产环境中工作(尽管它可以在开发服务器上工作)。

关于尼克的评论:确实,您应该依靠您的框架,而不是使用 sys.stdout.write 或 print 来输出您自己的东西。然而,有些人喜欢清楚(低级)了解所发生的事情,并且有时需要构建自己的小 CGI 以满足特定需求。但正如尼克所说,同时混合打印框架显然会导致重大问题:-)

于 2011-09-16T11:43:37.870 回答