2016-09-19 117 views
0

我對Django來說是全新的。在我的models.py中,我想要一個用戶模型來表示登錄到應用程序的用戶。如何在Django中爲用戶模型創建密碼字段?

我看到我可以如fname,lname,email和username這樣的字段(例如,簡單地添加「first_name = models.CharField(max_length = 50)」),但我怎麼會有一個密碼字段,用戶可以被認證?顯然,以明文形式存儲密碼是一種不好的做法。

+1

不要這樣做django中有半打久經考驗的用戶認證應用程序。 django-allauth尤其突出。請使用其中之一。 – e4c5

回答

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得到一個當前在線用戶例如,它會自動保存密碼散列函數,並在今後的

1

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) 
+0

如果我不想使用任何內置類,該怎麼辦?它還能完成嗎? – arun8r

+0

是的,可以看到更新後的答案。你基本上需要使用** make_password **方法。 – SpiXel

+0

@ arun8r如果有任何答案幫助您解決了問題,請花點時間,並通過點擊答案附近的答案來接受答案。 – SpiXel