【问题标题】:customizing request.user with a proxy model that extends Django User model使用扩展 Django 用户模型的代理模型自定义 request.user
【发布时间】:2012-03-24 12:46:21
【问题描述】:
class MyUser(User):
    class Meta:
        proxy = True
    def do_something:
        ...

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

【问题讨论】:

    标签: django django-models django-templates


    【解决方案1】:

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

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

    【讨论】:

    • 太棒了,我一直在到处寻找这个。知道如何使用 AnonymousUser 模型做类似的事情吗?
    【解决方案2】:

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

    【讨论】:

    • 感谢您的想法。我将研究中间件。干杯。
    猜你喜欢
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 2011-02-22
    • 2016-10-12
    • 2011-02-28
    • 2013-12-06
    相关资源
    最近更新 更多