2016-09-19 84 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