Django: исключения и возвраты, как правильно обрабатывать несколько потенциальных ситуаций? - PullRequest
1 голос
/ 07 февраля 2012

У меня есть функция в диспетчере, которая активирует учетную запись пользователя с помощью ключа.Когда предоставляется ключ, необходимо выполнить несколько проверок: существует ли ключ?срок действия ключа истек?а затем, если нет, менеджер активирует учетную запись.

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 для обработки этой информации, чтобы дать более полезную информацию в восходящем направлении?Настраивают ли пользовательские ошибки путь вперед?Должен ли я возвращать значения для анализа вверх по течению (кажется уродливым решением)?Есть ли другой способ?

1 Ответ

1 голос
/ 07 февраля 2012

Я бы поднял исключение внутри активации и поймал бы его снаружи.

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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...