Как проверить, находится ли значение в форме POST - PullRequest
0 голосов
/ 08 января 2020

Я хочу запросить, находится ли введенное значение в сообщении формы, и вызвать ошибку, если это не так:

    try:
        next_page = request.POST.get('next_page')
    except AttributeError:
        raise ImproperlyConfigured(
            "No URL to redirect to.  Either provide a url or define"
            " a get_absolute_url method on the Model.")

Однако, если next_page не указан, этот код приводит к next_page = None и ошибка не возникает. Куда я иду не так?

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Чтобы проверить, есть ли ключ в словаре POST, вы можете использовать обычный in

if 'next_page' not in request.POST:
    raise ImproperlyConfigured(
        "No URL to redirect to.  Either provide a url or define"
        " a get_absolute_url method on the Model.")
1 голос
/ 08 января 2020

Вместо использования try, кроме block, вы можете просто использовать обычное условное предложение, чтобы проверить, не является ли next_page None. (Для ясности я добавил значение по умолчанию None к вызову метода get, если ключ 'next_page' не найден)

next_page = request.POST.get('next_page', None)

if next_page is not None:
   # redirect code
else:
    raise ImproperlyConfigured(
            "No URL to redirect to.  Either provide a url or define"
            " a get_absolute_url method on the Model.")

РЕДАКТИРОВАТЬ:

Другая опция основана на просить прощения, а не разрешения:

try:
    redirect(request.POST.get('next_page'))
except KeyError:
    raise ImproperlyConfigured("text")

Здесь вам не нужно проверять, имеет ли значение next_page значение None, вы полагаетесь на функцию перенаправления, которая выдает ошибку, если она получает None. Затем вы поймаете это и поднимете свое Исключение.

...