0

我是 django 的新手,我担心我们是否可以为我们的应用程序为不同类型的用户使用多个模型进行身份验证,例如,客户使用客户模型,供应商使用供应商模型,并且保留默认用户注册模型仅用于管理? 如果是这样,你能指出我正确的方向吗,怎么做?应该使用哪个包?我想到的一种方法是向身份验证所需的每个模型添加一个外键,但这将涉及每个查询中的连接,这可能会导致性能问题。我需要知道是否有更好的方法。这些自定义模型也可以受益于管理面板中可用的所有权限。专家意见将不胜感激。

4

1 回答 1

0

有几个不同的选项可以处理这个问题。也许先检查Django-docu。我想自定义它以使用邮件地址对用户进行身份验证,这是knbkrahul-gupta在前文档中编写的示例:

Django 的默认身份验证适用于用户名和密码字段。电子邮件身份验证后端将根据电子邮件和密码对用户进行身份验证。

from django.contrib.auth import get_user_model

class EmailBackend(object):
    """
    Custom Email Backend to perform authentication via email
    """
    def authenticate(self, username=None, password=None):
        user_model = get_user_model() 
        try:
            user = user_model.objects.get(email=username)
            if user.check_password(password): # check valid password
                return user # return user to be authenticated
        except user_model.DoesNotExist: # no matching user exists 
            return None 

    def get_user(self, user_id):
        user_model = get_user_model() 
        try:
            return user_model.objects.get(pk=user_id)
        except user_model.DoesNotExist:
            return None

将此身份验证后端添加到 AUTHENTICATION_BACKENDS 设置。

# settings.py
AUTHENTICATION_BACKENDS = (
    'my_app.backends.EmailBackend', 
    ... 
)
于 2016-09-30T14:40:27.177 回答