0

我正在使用 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块中打印重定向 url 进行检查,它进入块但不重定向页面。

任何指针将不胜感激。

4

2 回答 2

2

web.redirect返回一个Redirect对象,它是 的一个实例Exception

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

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

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

于 2013-06-27T11:55:41.180 回答
1

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

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

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

于 2013-06-27T14:18:55.120 回答