2013-06-26 9 views
12

Ho confusione su cosa fa request.user si riferisce a Django ?? Fa riferimento al campo nome utente nella tabella auth_user o fa riferimento all'istanza del modello Utente?request.user in Django

ho avuto questo dubbio perché non ero in grado di accedere campo email nel modello utilizzando {{request.user.username}} o {{}} user.username

Così, invece ho fatto seguito nel file di vista

userr = User.objects.get(username=request.user) 

e superato 'UserR' per il modello e campo email accessibile come {{ userr.email }}

Anche se il suo lavoro, ma ho voluto avere un po 'di chiarezza su di esso.

Grazie :)

risposta

7

Se il modello riceve AnonymousUser, il riferimento a {{request.user.email}} non verrà trovato. In precedenza, è necessario chiedere se {{request.user.is_authenticated }}.

È necessario verificare se è incluso il processore di contesto django.core.context_processors.auth nella sezione TEMPLATE_CONTEXT_PROCESSORS delle impostazioni. Se si utilizza Django 1.4 o più recente, il processore di contesto è django.contrib.auth.context_processors.auth. Questo processore di contesto è responsabile di includere l'oggetto utente in ogni richiesta.

+1

È request.user passato per impostazione predefinita al modello o da eseguire esplicitamente? E in alcuni posti ho visto l'uso di {{user.is_authenticated}}. Funziona così? – zephyr

+0

Grazie a @Emigue. U vuoi dire che django.core.context_processors.auth è per versioni inferiori a 1,4? E anche {{user.is_authenticated}} funziona? – zephyr

0

request.user riferisce alla effettiva istanza di modello dell'utente.

request.user.FIELDNAME vi permetterà di accedere a tutti i campi del modello utente

+0

Ma la richiesta deve essere superata. È ?? – zephyr

+0

la richiesta è passata al modello django come questo. 'render (request, 'templatename', {'a': 'b' ....})' Il terzo parametro è il dizionario di contesto –

8

request.user è oggetto del modello d'uso.

Non è possibile accedere all'oggetto richiesta nel modello se non si passa esplicitamente a request. Se si desidera accedere all'oggetto utente dal modello, è necessario passarlo al modello o utilizzare RequestContext.

+0

E come ottenere l'utente corrente? Il mio modo di accedervi è nelle opinioni, nel modo giusto? – zephyr

+1

'request.user' è l'utente loggato corrente se l'utente ha effettuato l'accesso. Altrimenti è AnonymousUser. – falsetru

+0

@SumeetDhariwal, https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.user – falsetru

1

Dipende da ciò che si imposta.

Quindi, è meglio usare

user = User.objects.get(username=request.user.username) 

In realtà, non è necessario definire tali variabili se si aggiunge 'django.core.context_processors.request' nella lista TEMPLATE_CONTEXT_PROCESSORS in settings.py

Quindi è possibile accedere alla variabile { {request.user.username}} nei modelli se si utilizza render in views.py

+0

Grazie a @Shahail per avermi corretto là fuori. Penso che il mio codice stia probabilmente funzionando perché il modello User per default stampa il campo del nome utente. Come il modo in cui definiamo la funzione __unicode__ nella nostra classe personalizzata? È così?? – zephyr

+0

sì dipende da 'def __unicode__' – suhailvs

Problemi correlati