2010-10-02 8 views
15

Codice:Django: request.GET e 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? 

in PHP Frameworks Io in genere hanno per verificare parametro esiste e reindirizzare utente da qualche parte se non lo fa. Ma in Django il parametro inesistente genera 500 pagine di errore e sembra il comportamento desiderato. Quindi è ok lasciare codice così com'è o c'è una pratica migliore? Devo usare sempre parametri standard che passano come/myaction/paramvalue/invece di/myaction? Param_name = param_value (è piuttosto difficile creare tali URL per le richieste Ajax)?

risposta

30

Il server non dovrebbe mai generare una pagina di errore 500.

È possibile evitare l'errore utilizzando:

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

o:

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

provare btw ... eccetto il blocco sembra essere migliore nel caso in cui ho diversi parametri (1 eccetto il blocco insteat di diversi controlli per nessuno). – glss

+0

Sì, vero. Potresti anche scoprire di dover eseguire controlli più specifici sui parametri individualmente per un corretto intervallo di valori, la compatibilità tra i parametri e così via. –

+0

Uso i moduli django per convalidare l'input, anche per le chiamate Ajax. È più facile da usare se hai molti parametri di input e fa la maggior parte del lavoro per te. – OmerGertel

4

Sì, è necessario verificare per KeyError in tal caso. Oppure è possibile effettuare questa operazione:

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

ne dite di passare valore predefinito se param non esiste?

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

valore predefinito non è spesso disponibile. – glss

Problemi correlati