1

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

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。对两者都给出 False 并不能告诉我上游的观点是什么问题。我不会做 404 错误,因为这对用户来说是不透明的,并且无济于事。

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

4

1 回答 1

0

我会在 activate 内部引发异常并在外部捕获它。

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)

于 2012-02-07T18:26:21.720 回答