我對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