it-swarm.com.ru

Django: request.GET и KeyError

Код:

# it's an ajax request, so parameters are passed via GET method
def my_view(request):
    my_param = request.GET['param'] // should I check for KeyError exception?

В PHP Frameworks мне обычно приходится проверять наличие параметра и перенаправлять пользователя куда-либо, если это не так. Но в Django несуществующий параметр приводит к 500 страницам ошибок, и это кажется желаемым поведением. Так можно ли оставить код как есть или есть лучший метод? Должен ли я всегда использовать стандартные параметры, передаваемые как/myaction/paramvalue/вместо/myaction? Param_name = param_value (такие URL довольно сложно создать для запросов ajax)?

18
glss

Ваш сервер никогда не должен выдавать страницу с ошибкой 500.

Вы можете избежать ошибки, используя:

my_param = request.GET.get('param', default_value)

или же:

my_param = request.GET.get('param')
if my_param is None:
    return HttpResponseBadRequest()
37
Ned Batchelder

Да, вы должны проверить KeyError в этом случае. Или вы могли бы сделать это:

if 'param' in request.GET:
    my_param = request.GET['param']
else:
    my_param = default_value
7
Mike DeSimone

Как насчет передачи значения по умолчанию, если param не существует?

my_param = request.GET.get('param', 'defaultvalue')
0
Srikanth Chundi