我是Django的新手。在我的models.py中,我想要一个User模型来表示登录应用程序的用户。
我知道如何拥有fname,lname,email和username这样的字段(例如,只需添加" first_name = models.CharField(max_length = 50)")但我怎么能拥有密码字段,以便用户可以进行身份验证?显然,以明文形式存储密码是一种不好的做法。
答案 0 :(得分:0)
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")
将哈希"密码"并将其保存到CharField
。
修改
如果您不打算在AbstractBaseUser
上创建课程,并希望从头开始实施User
课程,则需要散列所有密码然后保存。为了散列密码,您可以使用make_password
函数。
from django.contrib.auth.hashers import make_password
hashed_password = make_password(raw_password)
答案 1 :(得分:0)
内置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
获取当前在线用户实例