在线搜索如何在Django中完成自定义身份验证时,我遇到了this和this文章。这两篇文章都指出了相同的说明。目前我有类似的东西。 (摘自第一篇文章)
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
例外情况。
答案 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上专门阅读,因为它为初学者提供了更容易的其他方法。