2009-09-23 10 views
6

roba semplice qui ...Test per biscotto esistenza in Django

se provo a fare riferimento a un biscotto in Django via

request.COOKIE["key"] 

se il cookie non esiste che lanciare un errore fondamentale.

per Django di GET e POST, dal momento che sono QueryDict oggetti, posso solo fare

if "foo" in request.GET 

che è meravigliosamente sofisticato ...

qual è la cosa più vicina a questo per i cookie che non è un blocco try/blocco Catch, se non altro ...

risposta

20

request.COOKIES è un dizionario Python standard, quindi funziona la stessa sintassi.

Un altro modo di farlo è:

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

che restituisce il valore se la chiave esiste, altrimenti 'default' - si può mettere qualcosa che ti piace al posto di 'default'.

5

primo luogo, è

request.COOKIES 

non request.COOKIE. L'altro ti creerà un errore.

In secondo luogo, si tratta di un dizionario (o, dizionario-like) oggetto, in modo da:

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

vi darà quello che ti serve. Se si desidera ottenere il valore del cookie, è possibile utilizzare:

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

poi, se non c'è nessun tasto "key", si otterrà una None, invece di un'eccezione.

+2

Da python 2.2, è possibile utilizzare "se" pippo "nella richiesta.COOKIES" - non è necessario aggiungere ".keys()" –

+1

a destra. Probabilmente sono solo io, ma la versione più lunga mi piace di più (forse si tratta di lavorare con il pre-2.2 per molto tempo). È più simmetrico e più implicito di cosa controllo se uso: in "foo" in dict.keys() e se "bar" in dict.values ​​() ... – kender

+0

@kender, c'è solo uno svantaggio di ' "foo" in dict.keys() '-' dict.keys() 'crea una lista che è quindi garbage collection - overhead aggiuntivo. – warvariuc