我是Django的新手 . 在我的models.py中,我想要一个User模型来表示登录应用程序的用户 .
我看到我可以拥有像fname,lname,email和username这样的字段(例如,只需添加“first_name = models.CharField(max_length = 50)”)但是如何设置密码字段以便用户可以进行身份验证?显然,以明文形式存储密码是一种不好的做法 .
内置django.contrib.auth用户模型,其中包含以下字段(用户名,名字,姓氏,密码,电子邮件,组,user_permissions,is_active,is_staff,is_superuser,last_login,last_joined)
您可以通过创建用户对象并为其设置密码来使用此内置用户模型 .
from django.contrib.auth.models import User user = User.objects.create(username="username", password = "password", email="email") user.save()
除了用户名,密码和电子邮件之外,django用户模型中的某些字段是可选的,默认情况下,如果您未指定,则会设置一些字段,如is_superuser ='f' .
它会自动将密码存储在哈希函数中 . 将来如果要更新任何用户的密码,您可以获取并更新
user = User.objects.get(username="username") user.set_password("password") user.save()
您可以通过request.user获取当前的在线用户实例
Django自己的AbstractBaseUser实现:
@python_2_unicode_compatible class AbstractBaseUser(models.Model): password = models.CharField(_('password'), max_length=128) last_login = models.DateTimeField(_('last login'), blank=True, null=True)
您将密码存储在CharField中,您不做的就是将其存储在那里,实际上为用户调用set_password,如下所示,
user.set_password("Password")
哈希"Password"并将其保存到 CharField .
CharField
编辑
如果您没有将您的类基于 AbstractBaseUser 并希望从头开始实现 User 类,则需要散列所有密码然后保存它们 . 为了散列密码,您可以使用 make_password 函数 .
AbstractBaseUser
User
make_password
from django.contrib.auth.hashers import make_password hashed_password = make_password(raw_password)
2 回答
内置django.contrib.auth用户模型,其中包含以下字段(用户名,名字,姓氏,密码,电子邮件,组,user_permissions,is_active,is_staff,is_superuser,last_login,last_joined)
您可以通过创建用户对象并为其设置密码来使用此内置用户模型 .
除了用户名,密码和电子邮件之外,django用户模型中的某些字段是可选的,默认情况下,如果您未指定,则会设置一些字段,如is_superuser ='f' .
它会自动将密码存储在哈希函数中 . 将来如果要更新任何用户的密码,您可以获取并更新
您可以通过request.user获取当前的在线用户实例
Django自己的AbstractBaseUser实现:
您将密码存储在CharField中,您不做的就是将其存储在那里,实际上为用户调用set_password,如下所示,
哈希"Password"并将其保存到
CharField
.编辑
如果您没有将您的类基于
AbstractBaseUser
并希望从头开始实现User
类,则需要散列所有密码然后保存它们 . 为了散列密码,您可以使用make_password
函数 .