使用扩展Django的代理模型自定义request.user用户模型
问题描述:
class MyUser(User):
class Meta:
proxy = True
def do_something:
...
通过以上所述,我使用代理模型技术扩展了Django用户模型的行为。我希望能以某种方式自定义request.user,这样MyUser实例,而不是User实例,每次都被分配给它。如果可能的话,我怎么能实现呢?使用扩展Django的代理模型自定义request.user用户模型
答
您可以从AuthMiddleware继承新的中间件类,或创建一个单独的中间件,它将在django的身份验证后处理请求,并将request.user更改为您的用户实例。
答
我看着代码,我的想法就在这里。晚,但我觉得能为别人
在文件的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
感谢您的想法是有用的。我会研究中间件。干杯。 – tamakisquare 2012-03-07 17:27:17