Django:异常和回归,处理多种潜在情况的正确方法是什么?

时间:2012-02-07 18:10:52

标签: django django-managers

我在Manager中有一个功能,可以通过密钥激活用户帐户。提供密钥时,需要执行多项检查:密钥是否存在?密钥到期了吗?然后,如果没有,经理激活帐户。

def activate(key):
    try:
        profile = self.get(key=key)
    except self.model.DoesNotExist:
        return None

    if not profile.key_expired():
        ## Activate user
        return user

    return None

问题当然是,对于“密钥不存在”和“给定的密钥已过期”都返回False。对两者都假,并没有告诉我上游的观点是什么问题。我没有做404错误,因为这对用户来说是不透明的,并没有帮助。

最好/正确的django / pythonic处理方法是什么,以便在上游提供更多有用的信息?自定义错误是前进的方向吗?我应该返回上游分析的值(似乎是一个丑陋的解决方案)?还有另一种方式吗?

1 个答案:

答案 0 :(得分:1)

我会在激活内部引发异常并将其捕获到外面。

def activate(key):
    try:
        profile = self.get_query_set().get(key=key)
    except self.model.DoesNotExist:
        raise

    if profile.key_expired():
       raise YourCustomException()
       # or simply return False

    ## Activate user
    return user

另外,我建议使用self.get_query_set().get(key=key)代替self.get(key=key)