2016-09-19 4 views
0

Я совершенно новый для Django. В моих models.py я хочу, чтобы модель User представляла пользователей, которые подписываются в приложении.Как создать поле пароля для модели пользователя в Django?

Я вижу, как я мог бы иметь такие поля, как fname, lname, email и имя пользователя (просто добавьте, например, first_name = models.CharField (max_length = 50) "), но как бы у меня было поле пароля, пользователи могут быть аутентифицированы? Очевидно, что неправильная практика хранения паролей в ясном тексте.

+1

Не делайте этого, есть полдюжины проверенных и проверенных приложений аутентификации пользователей в django. в особенности выделяется джанго-алаут. Пожалуйста, используйте один из них. – e4c5

ответ

0

Там построен в django.contrib.auth модели пользователя, который имеет следующие поля (имя пользователя, ПгвЬЫате, LastName, пароль, адрес электронной почты, группы, 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() 

некоторые поля в модели пользователя Джанго не являются обязательными, за исключением Пользовательским по электронной почте и по умолчанию устанавливает некоторые поля как is_superuser = «F», если вы не указали.

он будет автоматически сохранять пароль в хэш-функции и в будущем Если вы хотите обновить пароль любого пользователя вы можете получить и обновить

user = User.objects.get(username="username") 
user.set_password("password") 
user.save() 

Вы можете получить текущий онлайн экземпляр пользователя по request.user

1

собственная реализация 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

Смежные вопросы