簡體   English   中英

如何從 Django 的注冊表單中的密碼字段中獲取純密碼

[英]How to get the plain password from the password field in the signup form in Django

我在 django 中有注冊表單,我通過它為新用戶輸入條目。 可以使用u_form.save方法保存數據,但我還需要用戶輸入的普通密碼,因為通過 REST API 在其他網站創建帳戶需要該密碼,因此兩個密碼需要相同。 我可以從表單中訪問密碼,但是當我收到它時,Django 已經對其進行了加密。 我怎樣才能得到原始的純密碼?

這是我嘗試過的:

視圖.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)

forms.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 ,我試圖獲取密碼,但它給了我加密的密碼,而不是普通密碼。 有什么辦法可以做到這一點?

注意:為了實現這一點,我知道安全威脅。 我只想知道我怎樣才能做到這一點?

基於 Daniel Roseman 的回復,是的,我們可以使用.cleaned_data attribute訪問純密碼字段。 這是您將如何做到的。

password = u_form.cleaned_data['password']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM