Django: request.GET и KeyError - PullRequest
       4

Django: request.GET и KeyError

19 голосов
/ 02 октября 2010

Код:

# 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)?

Ответы [ 3 ]

39 голосов
/ 02 октября 2010

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

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

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

или

my_param = request.GET.get('param')
if my_param is None:
    return HttpResponseBadRequest()
7 голосов
/ 02 октября 2010

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

if 'param' in request.GET:
    my_param = request.GET['param']
else:
    my_param = default_value
0 голосов
/ 02 октября 2010

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

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