首页 文章

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

提问于
浏览
0

我是Django的新手 . 在我的models.py中,我想要一个User模型来表示登录应用程序的用户 .

我看到我可以拥有像fname,lname,email和username这样的字段(例如,只需添加“first_name = models.CharField(max_length = 50)”)但是如何设置密码字段以便用户可以进行身份验证?显然,以明文形式存储密码是一种不好的做法 .

2 回答

  • 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获取当前的在线用户实例

  • 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")
    

    哈希"Password"并将其保存到 CharField .

    编辑

    如果您没有将您的类基于 AbstractBaseUser 并希望从头开始实现 User 类,则需要散列所有密码然后保存它们 . 为了散列密码,您可以使用 make_password 函数 .

    from django.contrib.auth.hashers import make_password
    hashed_password = make_password(raw_password)
    

相关问题