2012-03-07 73 views
1
class MyUser(User): 
    class Meta: 
     proxy = True 
    def do_something: 
     ... 

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

回答

4

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

+0

感谢您的想法是有用的。我会研究中间件。干杯。 – tamakisquare 2012-03-07 17:27:17

8

我看着代码,我的想法就在这里。晚,但我觉得能为别人

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

太棒了,我一直在寻找这个。任何想法如何做与AnonymousUser模型类似的东西? – MrDBA 2016-05-22 09:30:29