【问题标题】:web.redirect() not working in web.pyweb.redirect() 在 web.py 中不起作用
【发布时间】:2013-06-27 10:40:12
【问题描述】:

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

任何指针将不胜感激。

【问题讨论】:

    标签: python redirect web.py


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 以前可以使用相同的代码。当我向脚本添加更多重定向时,它坏了。不过我会尝试将它与 return 或 raise 一起使用。
    • @AnkitJaiswal - 好吧,我错了,只是调用重定向确实设置了 301 状态并添加了 location 响应头。我已经更新了我的答案。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我首先使用了 web.seeother() 但也遇到了同样的问题。然后我尝试了 web.redirect() 并且它更早地工作了。当我添加更多重定向条件时它停止了。
    猜你喜欢
    • 2012-11-03
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    相关资源
    最近更新 更多