2009-09-23 15 views
6

Proste rzeczy tutaj ...Testowanie istnienia pliku cookie w Django

jeśli staram się odwołać cookie w Django poprzez

request.COOKIE["key"] 

jeśli ciasteczko nie istnieje, że rzuci kluczowy błąd.

Dla Django GET i POST, ponieważ są one QueryDict obiekty, mogę tylko zrobić

if "foo" in request.GET 

który jest cudownie wyrafinowany ...

co jest najbliższa rzecz do tego dla ciasteczek, które nie jest try/catch, jeśli coś ...

Odpowiedz

20

request.COOKIES to standardowy słownik Pythona, więc działa ta sama składnia.

Kolejny sposób to zrobić to:

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

która zwraca wartość, jeśli klucz istnieje, w przeciwnym razie „default” - można umieścić cokolwiek chcesz w miejsce „domyślnie”.

5

pierwsze, jest to

request.COOKIES 

nie request.COOKIE. Inny rzuci ci błąd.

Po drugie, jest to słownik (lub, słownik-like) obiekt, więc:

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

da ci to, czego potrzebujesz. Jeśli chcesz uzyskać wartość cookie, można użyć:

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

wtedy, jeśli nie ma klucza "key", dostaniesz None zamiast wyjątek.

+2

Od Pythona 2.2 można użyć "if" foo "na request.COOKIES" - nie ma potrzeby dodawania ".keys()" –

+1

w prawo. Prawdopodobnie to tylko ja, ale bardziej lubię dłuższą wersję (może to być kwestia pracy z pre-2.2 przez długi czas). Jest bardziej symetryczny, a więc bardziej niejawny, co sprawdzam, jeśli używam: w "foo" w dict.keys() i jeśli "bar" w dict.values ​​() ... – kender

+0

@kender, jest tylko wadą ' "foo" w dict.keys() '-' dict.keys() 'tworzy listę, która jest następnie zbierana przez śmieci - dodatkowy narzut. – warvariuc

Powiązane problemy