python - 如何从 Django 注册表单中的密码字段获取纯密码

标签 python django django-forms django-views passwords

我在 django 中有注册表单,通过它我可以为新用户输入条目。可以使用 u_form.save 方法保存数据,但我还需要用户输入的纯密码,因为通过 REST API 在其他网站中创建帐户需要该密码,因此两个密码需要相同。我可以从表单访问密码,但是当我收到它时,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)

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 属性 访问纯密码字段。以下是您的操作方法。

password = u_form.cleaned_data['password']

关于python - 如何从 Django 注册表单中的密码字段获取纯密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58671303/

相关文章:

用于 2D 外推样条函数的 Python Scipy?

Python:测试串行端口以获得答案

python - 从二叉树获取列表,TypeError

mysql - Django 2.0 SQLite3 到 MySQL 加载数据错误 : "The database backend does not accept 0 as a value for AutoField."

python - Django Admin - 覆盖 get_form 后缺少内联表单

python - 使用带有自制软件的 python 安装 selenium

Django 外键 to_field

c++ - 我如何将 C++ 和 Python 与 SWIG 集成

django - 使用 django-backbone 应用程序进行服务器端验证的最佳实践是什么?

python - 动态表单生成