使用扩展Django User模型的代理模型自定义request.user

时间:2012-03-07 00:03:43

标签: django django-models django-templates

class MyUser(User):
    class Meta:
        proxy = True
    def do_something:
        ...

通过上述内容,我使用代理模型技术扩展了Django用户模型的行为。我希望我能以某种方式自定义 request.user ,以便每次都为其分配MyUser实例而不是User实例。如果可能的话,我怎么能实现呢?

2 个答案:

答案 0 :(得分:9)

我查看了代码,我的想法就在这里。迟到但我认为对其他人有用

在文件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',
    )

答案 1 :(得分:4)

您可以从AuthMiddleware继承一个新的中间件类,或创建一个单独的中间件,它将在django的auth之后处理请求并将request.user更改为您的用户实例。