2012-03-07 106 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