web.redirect()无法在web.py中运行

时间:2013-06-27 10:40:13

标签: python redirect web.py

我正在使用web.py框架开发一个项目。如果从数据库查询返回的结果为空(或返回的行数为零),我有一个用于将用户重定向到不同屏幕的小代码。

voma_user_details = get_user_by_email(['id','is_active'],None,email)
if len(list(voma_user_details)) == 0:
    #return redirect_url+'?error=User not found in database'
    web.redirect(redirect_url+'?error=User not found in database')      
voma_id = int(voma_user_details[0]['id'])

此处当查询返回零记录时,页面应重定向到redirect_url,但重定向不起作用,并在下一行引发异常,即列表索引超出范围(列表长度为零)。我通过打印if块中的重定向网址进行检查,它进入了阻止,但没有重定向页面。

任何指针都将受到高度赞赏。

2 个答案:

答案 0 :(得分:2)

web.redirect返回Redirect个对象,该对象是Exception的实例。

你应该提高它(或者你也可以返回它)以使重定向发生。

否则该方法的其余部分仍将被执行,这可能会导致无关的异常(在这种情况下是一个IndexError,因为你试图获取一个空列表的元素)。

如果只调用web.redirect,则返回的字符串将作为响应内容发送,但响应头仍将包含重定向(使用状态301)。但浏览器通常会立即遵循301重定向。

答案 1 :(得分:1)

看起来像web.seeother()就是你想要的: http://webpy.org/cookbook/redirect%20seeother

我使用“raise web.seeother(xx)”很多,但还没有使用web.redirect()。从上面链接引用:

  

您不太可能经常使用web.redirect函数 - 它似乎做同样的事情,但它发送了http代码301,这是一个永久重定向。大多数Web浏览器将缓存新的重定向,并在您尝试再次执行操作时自动将您发送到该位置。重定向的一个很好的用例是当您更改站点的URL结构时,但希望旧链接因书签而起作用。