1.表单绑定
django为继承自Form类的表单维护了一个绑定状态(bound):
如果一个表单对象在实例化后被赋予过数据内容,则称该表单处于bound状态;已经处于bound状态的表单不能再python代码中修改其数据,而只能由网页用户在页面中输入数据进行修改!
2.表单数据验证
字段属性验证:验证表单中的字段是否满足特定的格式要求,比如Charfield字段是否有max_length属性
from django.shortcuts import render
from form import xxxForm
def test(request):
if request.method == 'POST':
form = xxxForm(request.POST)
if form.is_valid():
#添加正常业务处理代码,处理完成后可以重定向redirect页面或者直接渲染
else:
#添加提交数据不完成的处理代码,比如显示特定错误等
#render渲染界面
#字段属性验证一般通过model中字段约束完成,在form渲染时django会自己根据约束要求进行验证
开发者可以用is_valid函数在代码中获得表单验证是否通过的信息:
自定义逻辑验证:开发者自定义的一些逻辑要求验证
from django.forms import ModelForm, ValidationError
from models import Moment
class MomentForm(ModelForm):
class Meta:
model = Moment
fields = '__all__'
def clean(self):
clean_data = super(MomentForm, self).clean()
content = clean_data.get('content')
if content is None:
raise ValidationError("请输入Content内容")
elif content.find('ABCD') >= 0:
raise ValidationError("不能输入ABCD敏感词汇!")
return clean_data
#判定自定义复杂逻辑,重载Form子类的clean函数
3.检查变更字段
django提供has_changed函数判断用户是否修改表单数据:
def view_test(request):
data = {'content':'input it',
'user_name':'hah',
'kind':'aaa'
}
objForm = MomentForm(request.POST, initial=data)
if f.has_changed():
print("下面的字段都改了啊")
for index in f.changed_data:
print(index)
#request.POST:django从中解析出的用户的输入数据
#initial:Form的初始值,调用has_changed函数时,django用initial的值与初始值相比较,有变化返回True
#changed_data属性是一个修改字段名的列表