Класс AnonymousUser
Класс AnonymousUser является встроенным в систему аутентификации Django
и служит для унификации работы с пользователями, независимо от того,
аутентифицирован пользователь или нет. Экземпляр этого класса
автоматически устанавливается в атрибут user объекта request,
если текущий пользователь не аутентифицирован. Класс реализует
все основные методы и атрибуты, которые присутствуют у модели User,
но возвращает значения по умолчанию для неаутентифицированного состояния.
Синтаксис
Класс AnonymousUser не требует явного создания экземпляров,
так как автоматически управляется системой аутентификации Django.
Однако, для понимания его структуры, рассмотрим конструктор:
class AnonymousUser:
def __init__(self):
self.id = None
self.pk = None
self.username = ''
self.is_active = False
self.is_staff = False
self.is_superuser = False
self._groups = EmptySet()
self._user_permissions = EmptySet()
Основные свойства и методы
Класс AnonymousUser предоставляет следующие ключевые атрибуты
и методы, которые всегда возвращают значения по умолчанию:
from django.contrib.auth.models import AnonymousUser
# Создание анонимного пользователя
user = AnonymousUser()
# Основные атрибуты
print(user.is_authenticated) # False
print(user.is_anonymous) # True
print(user.username) # ''
print(user.id) # None
print(user.pk) # None
print(user.is_active) # False
print(user.is_staff) # False
print(user.is_superuser) # False
# Проверка прав доступа
print(user.has_perm('app.permission')) # False
print(user.has_perms(['app.perm1', 'app.perm2'])) # False
print(user.has_module_perms('app')) # False
# Получение имени
print(user.get_full_name()) # ''
print(user.get_short_name()) # ''
print(user.get_username()) # ''
Результат выполнения кода:
"False"
"True"
""
"None"
"None"
"False"
"False"
"False"
"False"
"False"
"False"
""
""
""
Пример . Использование в представлениях
Рассмотрим, как класс AnonymousUser используется в представлениях
для обработки запросов от неаутентифицированных пользователей:
from django.http import HttpResponse
from django.contrib.auth.models import User
def user_profile(request):
user = request.user
if user.is_authenticated:
# Пользователь аутентифицирован
username = user.username
email = user.email
status = "Authenticated user"
else:
# Пользователь анонимный (экземпляр AnonymousUser)
username = "Guest"
email = "Not provided"
status = "Anonymous user"
return HttpResponse(f"User: {username}, Email: {email}, Status: {status}")
Результат выполнения кода для анонимного пользователя:
"User: Guest, Email: Not provided, Status: Anonymous user"
Пример . Проверка прав доступа
Используем методы проверки прав на объекте AnonymousUser
для контроля доступа к ресурсам:
from django.contrib.auth.models import AnonymousUser
from myapp.models import Article
def check_permissions(request):
user = request.user
# Проверка прав на создание статьи
if user.has_perm('myapp.add_article'):
can_create = "Yes"
else:
can_create = "No"
# Проверка прав на изменение любой статьи
if user.has_perms(['myapp.change_article', 'myapp.delete_article']):
can_modify = "Yes"
else:
can_modify = "No"
# Проверка прав на модуль
if user.has_module_perms('myapp'):
module_access = "Granted"
else:
module_access = "Denied"
print(f"Can create: {can_create}")
print(f"Can modify: {can_modify}")
print(f"Module access: {module_access}")
return user
Результат выполнения кода:
"Can create: No"
"Can modify: No"
"Module access: Denied"
Пример . Использование в шаблонах
В шаблонах Django объект AnonymousUser также доступен
через переменную user. Рассмотрим пример шаблона:
{% if user.is_authenticated %}
<div>
<p>Welcome, {{ user.username }}!</p>
<p>Your email: {{ user.email }}</p>
<a href="{% url 'logout' %}">Logout</a>
</div>
{% else %}
<div>
<p>Welcome, Guest!</p>
<p>Please <a href="{% url 'login' %}">login</a> or <a href="{% url 'register' %}">register</a></p>
</div>
{% endif %}
{% if user.is_anonymous %}
<p>You are browsing as anonymous user</p>
{% endif %}
В результате шаблон отобразит разные блоки для аутентифицированных и анонимных пользователей.
Смотрите также
-
класс
User,
который представляет аутентифицированного пользователя -
метод
authenticate,
который выполняет аутентификацию пользователя по учетным данным -
функция
login,
которая устанавливает сессию для аутентифицированного пользователя -
атрибут
is_anonymous,
который всегда возвращает True для анонимных пользователей