Moh*_*han 5 python django django-models django-authentication
我正在开发一个项目,需要 3 种类型的用户。
我希望为所有三个供应商和客户拥有单独的模型,而不是在公共用户模型中拥有类型字段。
我解决这个问题的第一个方法是通过子类AbstractUser模型来定义所有模型
# models.py
from django.contrib.auth.models import AbstractUser
class Customer(AbstractUser):
pass
class Vendor(AbstractUser):
pass
Run Code Online (Sandbox Code Playgroud)
并添加自定义的身份验证后端来处理基于请求对象的用户身份验证。
# settings.py
AUTHENTICATION_BACKENDS = ['backends.CustomAuthBackend']
Run Code Online (Sandbox Code Playgroud)
我的 backends.py 文件将包含对用户进行身份验证的逻辑,并根据请求对象为每个用户使用不同的模型。
# backends.py
from __future__ import print_function
class CustomAuthBackend(object):
def authenticate(self, request, username=None, password=None):
# authenticate user based on request object
def get_user(self, user_id):
# logic to get user
Run Code Online (Sandbox Code Playgroud)
然而,这不起作用,看起来我还需要在 settings.py 中指定用于身份验证的AUTH_USER_MODEL 。
Django 是否允许从 3 个不同的表进行身份验证?我怎样才能继续这个?还有其他方法吗?我应该改变什么?
django.contrib.auth被设计为与一个 UserModel 一起使用。根据您想要实现的目标,有不同的方法。
如果您只想为不同类型的用户存储不同类型的配置文件/元数据,您可以使用多表继承- 在这种情况下,您可能会坚持使用默认用户模型。
当涉及到基于用户类型的不同权限时,您不应该使用单独的类来解决这个问题。而是使用组。这种方法更加灵活。一个人属于多个用户组的情况几乎总是可能发生。当您根据用户类别对此进行建模时,您就会遇到麻烦。
| 归档时间: |
|
| 查看次数: |
6432 次 |
| 最近记录: |