настройка request.user с моделью прокси, расширяющей модель пользователя Django - PullRequest
2 голосов
/ 07 марта 2012
class MyUser(User):
    class Meta:
        proxy = True
    def do_something:
        ...

С учетом вышеизложенного я расширяю поведение пользовательской модели Django, используя технику прокси-модели.Я надеялся, что смогу как-то настроить request.user , чтобы ему каждый раз назначался экземпляр MyUser вместо экземпляра User.Как я могу реализовать это, если это возможно?

Ответы [ 2 ]

9 голосов
/ 17 июля 2012

Я посмотрел на код, и моя идея здесь. Поздно, но я думаю, что может быть полезным для других

В файле myapp / backends.py

    from django.contrib.auth import backends
    from models import ProxyUser

    class ModelBackend(backends.ModelBackend):
        '''
        Extending to provide a proxy for user
        '''

        def get_user(self, user_id):
            try:
                user = ProxyUser.objects.get(pk=user_id)
            except ProxyUser.DoesNotExist:
                return None
            return user if self.user_can_authenticate(user) else None

И на settings.py

    AUTHENTICATION_BACKENDS = (
        'myapp.backends.ModelBackend',
    )
4 голосов
/ 07 марта 2012

Вы можете унаследовать новый класс промежуточного программного обеспечения от AuthMiddleware или создать отдельное промежуточное программное обеспечение, которое будет обрабатывать запрос после аутентификации django и изменять request.user на ваш пользовательский экземпляр.

...