Каков наилучший способ расширить анонимного пользователя в Django? - PullRequest
11 голосов
/ 11 мая 2010

Я хочу, чтобы все мои объекты User имели одинаковое базовое поведение, и для этого мне нужно добавить пару методов / свойств в Anonymous User.

Я уже разделил пользователя на подклассы, чтобы сделать объекты пользователя более богатыми, но мне было интересно, сделал ли кто-нибудь то же самое для Anonymous User? И если есть какие-либо предпочтительные способы сделать это!

Ответы [ 5 ]

9 голосов
/ 11 мая 2010

Ваше предложение промежуточного программного обеспечения заставило меня задуматься, и теперь я думаю, что лучшая идея - переписать стандарт AuthenticationMiddleware. Этот класс присваивает объекту запрос LazyUser, который при обращении к нужному пользователю разрешается путем вызова contrib.auth.get_user. Это, вероятно, правильное место для переопределения, так что он вызывает вашу настроенную функцию get_user, которая возвращает подкласс AnonymousUser.

2 голосов
/ 27 февраля 2018

Лучший способ - использовать пакет python (или написать свой), который заменит класс AnonymousUser по умолчанию в Django на ваш собственный класс. Вы можете реализовать промежуточное программное обеспечение для этого (я думаю, что это лучшее место).

Например, вы можете использовать django-custom-anonymous для настройки AnonymousUser. Также вы можете найти его на pypi .

2 голосов
/ 15 марта 2017

Более простым и более общим (но менее безопасным) решением было бы просто заменить django.contrib.auth.models.AnonymousUser вашим собственным классом:

class YourAnonymousUser(...):
    ...


import django.contrib.auth.models as django_auth_models
django_auth_models.AnonymousUser = YourAnonymousUser

Начиная с 1.10.5, Django лениво импортирует класс анонимного пользователя, поэтому у вас не возникнет проблем с ядром Django. Вы также редко взаимодействуете с AnonymousUser напрямую, поскольку можете просто использовать .is_anonymous(), поэтому с вами все будет в порядке, если вы знаете, как ваши зависимости используют AnonymousUser.

2 голосов
/ 11 мая 2010

Я начинаю думать, что промежуточное ПО - это, вероятно, самое простое решение, которое проверяет класс request.user и, если AnonymousUser, заменяет его на AnonymousUser с подклассами, который имеет дополнительные свойства.

Это звучит разумно?

0 голосов
/ 11 мая 2010

Вы должны создать подкласс или создать модель, которая имеет отношение один к одному с AnonymousUser class .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...