后端自定义身份验证 - 在运行时创建用户而不保存

时间:2016-06-01 06:19:49

标签: python django authentication

在线搜索如何在Django中完成自定义身份验证时,我遇到了thisthis文章。这两篇文章都指出了相同的说明。目前我有类似的东西。 (摘自第一篇文章)

class Client(models.Model):
   email = models.EmailField(unique=True, max_length=100)
   password = models.CharField(max_length=128)

然后在另一个python文件中我有这个

from .models import Client

class ClientAuthBackend(object):

    def authenticate(self, username=None, password=None):
        try:
            user = Client.objects.get(email=username)
            return user

            if password == 'master':
                # Authentication success by returning the user
                return user
            else:
                # Authentication fails if None is returned
                return None
        except Client.DoesNotExist:
            return None

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

我刚刚开始使用Django并且有点跳过了数据库交互的模型部分,因为在我当前的项目中我由于某些原因使用RAW和自定义SQL。

我的问题在哪里
user = Client.objects.get(email=username)

从中获取用户。我是否必须进入数据库? 我想要做的是在运行时创建用户而不是保存到数据库。我尝试这样做

#The following creates and saves a user in the db
 u =User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword',cust_address="my_custom_address",cust_msg="Users custom message")

以上内容会返回Client.DoesNotExist例外情况。

1 个答案:

答案 0 :(得分:0)

  

我的问题是

在哪里
scrollView
     

获取用户

显然,user = Client.objects.get(email=username) Client。这意味着它代表数据库中相关表的单个记录,无论何处,这取决于相关的models.Model设置。

因此,表示该模型的表可以使用下一个Django迁移和Django允许的许多其他有用的东西来创建。

因此,上述语句必须指示Django ORM使用该特定电子邮件从该特定表中获取所有settings.py条记录。如果不存在这样的条目,则不会返回任何条目。

  

我试过这个

Client

这是你让事情复杂化的地方。 u =User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword',cust_address="my_custom_address",cust_msg="Users custom message") 方法不是Django ORM的一部分,而是Django default auth model manager create_user的一部分。您应该自己提供这样的方法,或者更容易使用默认Django模型管理器提供的标准create方法。

即使在某些缓存中也不保存用户模型根本没有意义,因为这意味着用户每次登录时都会注册。

说完所有这些之后,我强烈建议您阅读Django官方文档。以上所有内容都包含在内,文档非常全面且不长。然后,您可以阅读和理解野外教程,这些教程可能是正确的也可能是不正确的。

Customizing authentication topic上专门阅读,因为它为初学者提供了更容易的其他方法。