python - 如何从 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)
表格.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']
推荐阅读
- python - 从 Selenium IDE 到 Python - 没有这样的元素
- c++ - 专门的模板是否需要专门的声明?
- tomcat - 像 Tomcat 这样的网络服务器是否只能用作 TCP 服务器?
- c# - 将平面列表转换为多级层次结构
- go - 在 Go 中使用 conn.Read() 读取前几个字节后,如何继续读取剩余字节?
- mysql - 如何在 SQL 中删除多个 MySql Apache 表行?
- java - 无法从用于 Spark 的 Java 数据集中的 AWS S3 读取数据
- netbeans - 如何将 propertyChangeListener 转换为 Lookup?
- php - 如何检查ajax调用是否返回一个空数组数组
- r - 构造 x 和 y 函数参数,它们既可以作为公式 (y ~ x),也可以单独使用