На что ссылается 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 позволит вам получить доступ ко всем полям пользовательской модели