在web2py中,假设我有以下网址:
www.example.com/customer/view/1
由view()
控制器中的customer
函数支持,并在数据库中显示id为1的客户。
在view
函数中,我想处理以下错误情况:
/customer/view/
) - >提高404 /customer/view/apple
) - >提高404 /customer/view/999999
) - >提高404 在控制器函数中以返回正确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)
答案 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
。