1. 先说明一下我遇到的情况: 当在前端页面中POST提交的表单时,假设表单中有一个input标签,在后端定义了一个From类对request.POST进行清洗和验证,转换后的数据中中却不包含这个input的内容。 我就很迷,这咋回事啊。
POST函数的处理方法:
def post(self, request):
form = PerfectInfoForm(request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
email = form.cleaned_data.get('email')
job = form.cleaned_data.get('job')
age = form.cleaned_data.get('age')
avatar = form.cleaned_data.get('avatar')
sex = form.cleaned_data.get('sex')
Form类的定义:
class PerfectInfoForm(forms.Form,FormMixin):
username = forms.CharField(max_length=100,min_length=1)
email = forms.EmailField()
job = forms.CharField(max_length=200)
age = forms.IntegerField(min_value = 1)
avatar = forms.URLField(max_length=200)
sex = forms.IntegerField()
2. 问题解决:
本来request.POST中肯定是包含form表单中各个标签项的内容的,只不过在这一步: fpost = PerfectInfoForm(request.POST) 的时候丢失了信息,转换后的fpost变量中不在含有原本form表单中各个标签项的内容。
出现这个问题的原因是: 前端中各个标签项的name属性没有和Form类中的名字保持一致。只要保持一致就fpost中就不会出现丢失变量的现象了。
3.Form的检验功能:
if fpost.is_valid(): 这条语句就是看提取的数据满不满足Form类定义时各个字段的属性要求。如果有一个不满足的话,fpost.is_valid() 返回假,并且给出了提示信息,通过 fpost.get_errors() 获取,返回是一个字典。