我对Django来说是全新的。在我的models.py中,我想要一个用户模型来表示登录到应用程序的用户。如何在Django中为用户模型创建密码字段?
我看到我可以如fname,lname,email和username这样的字段(例如,简单地添加“first_name = models.CharField(max_length = 50)”),但我怎么会有一个密码字段,用户可以被认证?显然,以明文形式存储密码是一种不好的做法。
我对Django来说是全新的。在我的models.py中,我想要一个用户模型来表示登录到应用程序的用户。如何在Django中为用户模型创建密码字段?
我看到我可以如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")
会散列“密码”并将其保存到CharField
。
编辑
如果不立足于AbstractBaseUser
类,想从头开始实现一个User
类,需要哈希所有的密码,然后保存它们。为了散列密码,您可以使用make_password
函数。
from django.contrib.auth.hashers import make_password
hashed_password = make_password(raw_password)
不要这样做django中有半打久经考验的用户认证应用程序。 django-allauth尤其突出。请使用其中之一。 – e4c5