在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ django 里面的cleaned_data少了數(shù)據(jù)

django 里面的cleaned_data少了數(shù)據(jù)

用djang寫一個用戶注冊,在req.POST中傳入了4個參數(shù)

clipboard.png
然后form里面的data顯示也是這幾個數(shù)據(jù)

clipboard.png

但是在form.is_valid()時發(fā)現(xiàn),
self.cleaned_data里面沒有了enpassword,但是self.data里面還有

clipboard.png

為什么呢
代碼如下:
forms.py

from django import forms
class UserForm(forms.Form):
    email=forms.EmailField(label='郵箱')
    username=forms.CharField(max_length=20,label='用戶名')
    password=forms.CharField(max_length=20,label='密碼')
    enpassword=forms.CharField(max_length=20,label='確認密碼')
    def clean_password(self):
        password=self.cleaned_data['password']
        enpassword=self.cleaned_data['enpassword']
        if password==enpassword:
            return password
        else:
            raise forms.ValidationError('Please re-enter your password.')

view.py

def registe_view(req):
    if req.method=='POST':
        form=UserForm(req.POST)
        if form.is_valid():
            username=form.cleaned_data['username']
            email=form.cleaned_data['email']
            password=form.cleaned_data['password']
            enpassword=form.cleaned_data['enpassword']
            user=authenticate(username=username,email=email,password=password)
            user=User.objects.create_user(username=username,email=email,password=password)
            user.save()
            context={'title':'注冊','status':'成功'}
            return render(req,'redirect.html',context=context)
    else:
        form=UserForm()
    return render(req,'login/registe.html',context={'form':form,'value':'注冊'})

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{ value }}</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {% for field in form %}
        <p class="fieldWrapper">
            {{ field.label_tag }}{{ field }}
            {{ field.errors }}
        </p>
    {% endfor %}
    <input type="submit" value="{{ value }}">
</form>
</body>
</html>
回答
編輯回答
未命名

改成clean_enpassword,改成clean不會跳提示信息,不知道為什么

2018年3月18日 08:46
編輯回答
命多硬

看了很久都沒看出哪里有問題啊。233...
也沒看見你在哪里執(zhí)行了 clean_password 這個類函數(shù)。

    def clean_password(self):
        password=self.cleaned_data['password']
        enpassword=self.cleaned_data['enpassword']
        if password==enpassword:
            return password
        else:
            raise forms.ValidationError('Please re-enter your password.')

不明白上面代碼里面的 return password 什么意義。
建議修改成:

    def clean(self):
        cleaned_data = super(UserForm, self).clean()
        password=cleaned_data['password']
        enpassword=cleaned_data['enpassword']
        if not password==enpassword:
            raise forms.ValidationError('Please re-enter your password.')
2018年7月12日 07:39