class MyUser(User):
class Meta:
proxy = True
def do_something:
...
通过上述内容,我使用代理模型技术扩展了Django用户模型的行为。我希望我能以某种方式自定义 request.user ,以便每次都为其分配MyUser实例而不是User实例。如果可能的话,我怎么能实现呢?
答案 0 :(得分: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
并在settings.py
上 AUTHENTICATION_BACKENDS = (
'myapp.backends.ModelBackend',
)
答案 1 :(得分:4)
您可以从AuthMiddleware继承一个新的中间件类,或创建一个单独的中间件,它将在django的auth之后处理请求并将request.user更改为您的用户实例。