2016-05-25 25 views
6
if not request.user.is_authenticated: 
    return None 

try: 
    return ClientProfile.objects.get(user=request.user) 
except ClientProfile.DoesNotExist: 
    return None 

Questo codice deve restituire None, se non si è effettuato il login e si sta tentando di chiamarlo. Ma per come la vedo da stacktrace, si blocca con l'errore "oggetto 'AnonymousUser' non è iterabile" su questa linea:L'oggetto 'AnonymousUser' non è iterable

return ClientProfile.objects.get(user=request.user) 

sto navigando nella pagina seguente in privato, quindi sono al 100% non autenticato .

Come risolvere questo problema?

risposta

9

In Django 1.9 e versioni precedenti, is_authenticated() è un metodo, è necessario chiamarlo.

if not request.user.is_authenticated(): 
    ... 

È un errore facile dimenticare di chiamare il metodo. Nel tuo caso sta causando un errore, ma in altri casi potrebbe consentire agli utenti di accedere ai dati che non dovrebbero. Da Django 1.10, is_authenticated sta cambiando in una proprietà per impedirlo.

+0

Oh, grazie. Copia-incollato dal codice modello :) – arts777