Атрибут user
Атрибут user класса HttpRequest предоставляет доступ к модели пользователя, связанной с текущим запросом. Этот атрибут автоматически заполняется промежуточным программным обеспечением аутентификации Django, которое добавляет объект пользователя к каждому запросу. Если пользователь не аутентифицирован, атрибут содержит экземпляр анонимного пользователя, который не имеет прав доступа. Атрибут позволяет проверять статус аутентификации, получать данные пользователя и управлять сессиями.
Синтаксис
request.user
Пример
Давайте проверим, аутентифицирован ли текущий пользователь, и выведем его имя:
from django.shortcuts import render
from django.http import HttpResponse
def user_profile(request):
if request.user.is_authenticated:
username = request.user.username
return HttpResponse(f"Welcome, {username}!")
else:
return HttpResponse("Please log in.")
Результат выполнения кода при аутентифицированном пользователе:
"Welcome, john_doe!"
Пример
Давайте используем атрибут user для проверки прав доступа и получения связанных данных:
from django.shortcuts import render
from myapp.models import Article
def my_articles(request):
if request.user.is_authenticated:
articles = Article.objects.filter(author=request.user)
context = {'articles': articles, 'user': request.user}
return render(request, 'my_articles.html', context)
else:
return render(request, 'login_required.html')
Результат выполнения кода:
[<Article: Первая статья пользователя>, <Article: Вторая статья пользователя>]
Пример
Давайте получим данные текущего пользователя для отображения в профиле:
from django.shortcuts import render
def profile_view(request):
user = request.user
if user.is_authenticated:
user_data = {
'username': user.username,
'email': user.email,
'first_name': user.first_name,
'last_name': user.last_name,
'is_active': user.is_active,
'is_staff': user.is_staff
}
return render(request, 'profile.html', {'user_data': user_data})
else:
return render(request, 'login.html')
Результат выполнения кода:
{
'username': 'john_doe',
'email': 'john@example.com',
'first_name': 'John',
'last_name': 'Doe',
'is_active': True,
'is_staff': False
}