Django не хранит пароль в базе данных - PullRequest
0 голосов
/ 18 февраля 2020

Когда я печатаю свой пароль из поля зрения, в командной строке он отображается как «non», я использую только password1 в forms.py, я помещаю pass2 = none

Models.py: -

class Profile(models.Model):
            user = models.OneToOneField(User, on_delete=models.CASCADE)
            bio = models.TextField(max_length=500, blank=True)
            location = models.CharField(max_length=30, blank=True)
            birth_date = models.DateField(null=True, blank=True)
            gender = models.CharField(max_length=10,blank=True)

            def __str__(self):
                return self.fullname

Forms.py: -

class UserForm(forms.ModelForm):
            username = forms.CharField(widget=forms.TextInput(attrs={'class':'validate','placeholder': 'Enter Username'}))
            password1 = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder':'Enter Password'}))
            email=forms.EmailField(widget=forms.TextInput(attrs={'placeholder':'Enter Email'}))
    password2=None


            class Meta:
                model=User
                fields=['username','password1','email']



        class ProfileForm(forms.ModelForm):
            fullname = forms.CharField(widget=forms.TextInput(attrs={'placeholder':'Enter fullname'}))
            class Meta:
                model=Profile
                fields=['fullname']

views.py: -

def register(request):
        if request.method =='POST':
            form = UserForm(request.POST)
            profile_form = ProfileForm(request.POST)
            if form.is_valid() and profile_form.is_valid():
                user=form.save()
                profile=profile_form.save(commit=False)
                profile.user=user
                profile.save()
                username= form.cleaned_data.get('username')
                password= form.cleaned_data.get('password')
                print(username)
                print(password)
                messages.success(request,f'account created for {{ username }}')
                return redirect('home')
        else:
            form = UserForm()
            profile_form = ProfileForm()
        context={'form':form , 'profile_form':profile_form}
        return render(request, 'users/register.html',context)

** Когда я печатаю свой пароль в viws, он показывает None.also я использую только password1 **

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Проблема в том, что вы UserForm.

Требуются поля: ['username','password1','email'] из модели User, как если бы они существовали.

Модель User НЕ имеет поле с именем "password1". У него есть поле "password".

Так что если вы измените поля в своем классе UserForm Meta на ['username','password','email'] и также измените поле UserForm "password1", оно будет работать.

Теперь, когда вы сохраните действительную форму, она фактически передаст поле ("password") в User model, необходимое для генерации хешированного пароля.

0 голосов
/ 18 февраля 2020

Вы используете пользовательский модуль, который поставляется с django.

from django.contrib.auth import authenticate, login, get_user_model
from django.contrib.auth.models import User  

Django для хранения данных в файле db.sqlite в зашифрованном формате. Вам нужен секретный ключ для доступа при декодировании, который присутствует в файле settings.py. Вы можете декодировать все данные с ним, но не пароль

Пароли будут хешироваться в алгоритме sha256 в течение 16 итераций, поэтому вы не сможете получить пароль, и это делается по умолчанию. Если вы хотите сбросить пароль, используйте put call, чтобы сбросить его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...