2009-09-23 5 views
6

Простые вещи здесь ...Тестирование печенья существования в Django

если я пытаюсь ссылаться печенье в Django с помощью

request.COOKIE["key"] 

, если куки не существует, что будет бросать ключевую ошибку.

Для Джанго GET и POST, так как они QueryDict объекты, я могу просто сделать

if "foo" in request.GET 

, который удивительно сложный ...

что ближе всего к этому для печенья, которое не попробовать/поймать блок, если что-нибудь ...

ответ

20

request.COOKIES - стандартный словарь Python, поэтому работает тот же синтаксис.

Другой способ сделать это:

request.COOKIES.get('key', 'default') 

, которая возвращает значение, если ключ существует, в противном случае «по умолчанию» - вы можете положить все что угодно вместо «по умолчанию».

5

Во-первых, это

request.COOKIES 

нет request.COOKIE. Другой ответит вам на ошибку.

Во-вторых, это словарь (или словарь-подобный) объект, так:

if "foo" in request.COOKIES.keys() 

даст вам то, что вам нужно. Если вы хотите получить значение куки, вы можете использовать:

request.COOKIES.get("key", None) 

затем, если нет ключа "key", вы получите None вместо исключения.

+2

С python 2.2 вы можете использовать 'if "foo" в запросе.COOKIES' - нет необходимости добавлять '.keys()' –

+1

вправо. Наверное, это только я, но мне больше нравится более длинная версия (возможно, это вопрос работы с pre-2.2 в течение длительного времени). Это более симметрично и, следовательно, более неявное, что я проверю, если я использую: в «foo» в dict.keys(), и если «bar» в dict.values ​​() ... – kender

+0

@kender, есть просто недостаток ' «foo» в dict.keys() '-' dict.keys() 'создает список, который затем собирает мусор, - дополнительные накладные расходы. – warvariuc

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