Как получить простой пароль из поля пароля в форме регистрации в Django - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть форма регистрации в django, через которую я беру запись для нового пользователя. Данные могут быть сохранены с использованием метода u_form.save, но мне также нужен простой пароль, который пользователь ввел, так как этот пароль будет необходим для создания учетной записи на другом веб-сайте через API REST, и, следовательно, оба пароля должны быть одинаковыми. Я могу получить доступ к паролю из формы, но когда я его получаю, Django уже зашифровал его. Как я могу получить оригинальный простой пароль?

Это то, что я пробовал:

views.py

from users.forms import SignUpForm, ProfileForm
def create(request):
    context = {}
    if(request.method == 'POST'):
        u_form = SignUpForm(request.POST) # fill it with user details
        p_form = ProfileForm(request.POST, request.FILES)
        if u_form.is_valid() and p_form.is_valid():
            user = u_form.save()
            email = user.email
            username = user.username
            first_name = user.first_name
            # Accessing plain password
            password = user.password
            Profile.objects.filter(user=user).delete()
            profile = p_form.save(commit=False)
            profile.user = user
            profile.save()
            messages.success(request, f'Account Created')
            # LOGIC TO CREATE MANTIS ACCOUNT THROUGH THE REST API WITH SAME USERNAME AND PASSWORD AS OF MY DJANGO WEBSITE
    return render(request, 'mainapp/homepage.html', context)

формы.py

from django.contrib.auth.forms import UserCreationForm
from django import forms
from django.contrib.auth.models import User
from .models import Profile

class SignUpForm(UserCreationForm):

    email = forms.EmailField(required=True,
                         label='Email',
                         error_messages={'exists': 'Oops'},
                         widget=forms.TextInput(attrs={'readonly':'readonly'}))
    username = forms.Field(widget=forms.TextInput(attrs={'readonly':'readonly'}))
    first_name = forms.Field(widget=forms.TextInput(attrs={'readonly':'readonly'}))

    readonly_fields = ('username', 'first_name', 'email')
    class Meta:
        model = User
        fields = ("username", "first_name", "email", "password1", "password2")




class ProfileForm(forms.ModelForm):
    emp_type = forms.Field(widget=forms.TextInput(attrs={'readonly':'readonly'}))
    pay_type = forms.Field(widget=forms.TextInput(attrs={'readonly':'readonly'}))
    class Meta:
        model = Profile
        fields = ['pay_type', 'emp_type', 'contact', 'whatsapp', 'gender', 'avatar']

В файле views.py password = user.password я пытаюсь получить пароль, но он дает мне зашифрованный, а не простой пароль. Есть ли способ достичь этого?

Примечание: Я знаю об угрозе безопасности для достижения этой цели. Я просто хочу знать, как мне этого добиться?

1 Ответ

0 голосов
/ 02 ноября 2019

Опираясь на ответ Дэниела Роузмана, Да, мы можем получить доступ к полю простого пароля, используя .cleaned_data attribute. Вот как бы вы это сделали.

password = u_form.cleaned_data['password']
...