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

tam*_*are 2 django django-templates django-models

class MyUser(User):
    class Meta:
        proxy = True
    def do_something:
        ...
Run Code Online (Sandbox Code Playgroud)

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

小智 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
Run Code Online (Sandbox Code Playgroud)

在settings.py上

    AUTHENTICATION_BACKENDS = (
        'myapp.backends.ModelBackend',
    )
Run Code Online (Sandbox Code Playgroud)