2010-10-02 2 views
15

Код:Джанго: 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 рамочные я обычно должен проверить параметра существует и перенаправляет пользователя куда-нибудь, если это не так. Но в параметре неинициализированного Django появляется страница с 500 ошибками, и это кажется желаемым поведением. Так что нормально оставить код как есть или есть лучший практик? Должен ли я всегда использовать стандартные параметры, передаваемые как/myaction/paramvalue/вместо/myaction? Param_name = param_value (как бы сложно создать такие URL-адреса для аякс-запросов)?

ответ

30

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

Вы можете избежать ошибки с помощью:

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

или:

my_param = request.GET.get('param') 
if my_param is None: 
    return HttpResponseBadRequest() 
+1

btw try ... except block, кажется, лучше в случае, если у меня есть несколько параметров (1 исключая блокировку нескольких проверок для None). – glss

+0

Да, правда. Вы также можете обнаружить, что вам нужно выполнять более конкретные проверки параметров отдельно для правильного диапазона значений, совместимости между параметрами и т. Д. –

+0

Я использую формы django для проверки ввода, даже для вызовов ajax. Это проще в использовании, если у вас много входных параметров, и это делает большую часть работы для вас. – OmerGertel

4

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

if 'param' in request.GET: 
    my_param = request.GET['param'] 
else: 
    my_param = default_value 
0

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

+0

Значение по умолчанию не всегда доступно. – glss

Смежные вопросы