我在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处理方法是什么,以便在上游提供更多有用的信息?自定义错误是前进的方向吗?我应该返回上游分析的值(似乎是一个丑陋的解决方案)?还有另一种方式吗?
答案 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)