如何在Django中为用户模型创建密码字段?

我对Django完全陌生。 在我的models.py中,我想要一个用户模型来表示登录到应用程序的用户。

我看到我可以如何使用fname,lname,email和username等字段(例如,简单地添加“first_name = models.CharField(max_length = 50)”),但我如何获得密码字段以便用户可以通过身份验证? 显然,以明文形式存储密码是一种不好的做法。


在django.contrib.auth用户模型中建立了以下字段(用户名,名字,姓氏,密码,电子邮件,组,用户权限,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")

将散列“密码”并将其保存到CharField

编辑

如果您不基于AbstractBaseUser类,并且想要从头开始实现User类,则需要对所有密码进行哈希处理,然后保存它们。 为了散列密码,可以使用make_password函数。

from django.contrib.auth.hashers import make_password
hashed_password = make_password(raw_password)
链接地址: http://www.djcxy.com/p/33749.html

上一篇: How to create a password field for a user model in Django?

下一篇: Authentication method return None in django