На что ссылается request.user в Django?

У меня путаница в отношении того, на что ссылается request.user в Django? Это относится к полю имени пользователя в таблице auth_user или к экземпляру модели пользователя?

У меня было это сомнение, потому что я не смог получить доступ к полю электронной почты в шаблоне, используя {{request.user.username}} или {{user.username}}.

Поэтому вместо этого я сделал следующее в файле views:

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

И передал userr в шаблон и получил доступ к полю электронной почты как {{ userr.email }}.

Хотя это работает, но я хотел иметь некоторую ясность по этому поводу.

Ответ 1

Если ваш шаблон получает AnonymousUser, ссылка на {{request.user.email}} не будет найдена. Раньше вы должны спросить, есть ли {{request.user.is_authenticated }}.

Вы должны проверить, включен ли он в контекстный процессор django.core.context_processors.auth в разделе TEMPLATE_CONTEXT_PROCESSORS параметров. Если вы используете Django 1.4 или последний, то контекстный процессор django.contrib.auth.context_processors.auth. Этот обработчик контекста отвечает за включение объекта пользователя в каждый запрос.

Ответ 2

request.user - объект модели пользователя.

Вы не можете получить доступ к объекту запроса в шаблоне, если явно не передать request. Если вы хотите получить доступ к объекту пользователя из шаблона, вы должны передать его в шаблон или использовать RequestContext.

Ответ 3

Это зависит от того, что вы установили.

Итак, лучше использовать

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

На самом деле вам не нужно определять такие переменные, если вы добавляете 'django.core.context_processors.request' в список TEMPLATE_CONTEXT_PROCESSORS в settings.py

Затем вы можете получить доступ к переменной {{request.user.username}} в шаблонах, если используете render в views.py

Ответ 4

request.user относится к фактическому экземпляру модели пользователя.

request.user.FIELDNAME позволит вам получить доступ ко всем полям пользовательской модели