在web2py中检查数据库支持的视图中的有效/现有ID的标准代码是什么?

时间:2013-09-25 09:36:37

标签: error-handling web2py http-error

在web2py中,假设我有以下网址:

www.example.com/customer/view/1

view()控制器中的customer函数支持,并在数据库中显示id为1的客户。

view函数中,我想处理以下错误情况:

  1. 没有传递任何参数(/customer/view/) - >提高404
  2. 传递非整数参数(/customer/view/apple) - >提高404
  3. 传递整数参数但在数据库中不存在(/customer/view/999999) - >提高404
  4. 发生应用程序错误,例如无法连接到数据库 - >提高500例外
  5. 在控制器函数中以返回正确HTTP错误的方式处理这些情况的标准/规范/正确方法是什么?这是一种常见的情况,我希望每次都能以正确和简洁的方式进行。

    除了不区分id无效/现有错误和任何其他错误之外,这几乎可以正常工作:

    def view():
        try:
            customer = db(db.customer.id==request.args(0, cast=int)).select()[0]
        except:
            raise HTTP(404, 'Cannot find that customer')
    
        return dict(customer=customer)
    

1 个答案:

答案 0 :(得分:1)

def view():
    id = request.args(0, cast=int, otherwise=lambda: None)
    customer = db(db.customer.id == id).select().first()
    if not customer:
        raise HTTP(404, 'Cannot find that customer' if id
                   else 'Missing/invalid customer ID')
    return dict(customer=customer)

如果转换在request.args()中失败,默认情况下它将引发自己的HTTP(404),但您无法控制该消息。因此,在这种情况下,您可以使用otherwise参数返回None。如果arg丢失或者是非整数,或者如果在数据库中找不到客户,则数据库查询将返回None