(一)在自己的app当中创建一个forms.py脚本
代码:
from django import forms
class AuthorForm(forms.Form):
name = forms.CharField(max_length=32,required=False,min_length=6)
age = forms.IntegerField(label = '作者年龄')
birthday = forms.DateTimeField(label='作者生日')
email = forms.EmailField(label='作者邮箱')
phone = forms.CharField(max_length=32,label='作者电话',
widget = forms.TextInput(attrs={"style":"color:red"}) )
# photo = forms.ImageField()
address = forms.CharField(widget=forms.Textarea, label="家庭地址")
拓展:这个表单也可以用这种方式执行
from app.models import Author
class AuthorForm_v2(forms.ModelForm):
class Meta:
model = Author
fields = ["name","age"]
(二)urls配置
(三)views配置
from app.forms import AuthorForm
def formExa(request):
authorForm = AuthorForm() # 实例化空的表单,提交到前端给用户使用
if request.method =="POST" and request.POST: # request.POST包含所有HTTP POST参数的类字典对象
validData = AuthorForm(request.POST) # 对提交到数据进行认证(AuthorForm类中声明了各字段的要求,所以用AuthorForm验证并返回验证结果)
if validData.is_valid(): # 若果认证合法
cleanData = validData.cleaned_data # 返回所有提交的数据,可让前端渲染
else:
cleanData = validData.errors # 认证非法则返回错误信息,locals()拿到后可让前端渲染
return render(request,"form.html",locals()) # locals()包含authorForm 、validData 、
cleanData
(四)前端渲染代码
<form method="post">
{% csrf_token %} #post请求比加
{% for field in authorForm %} # authorForm是AuthorForm在views里实例化后的值,
<p> # 循环得到表单每一项渲染在前端
<label style="color: #ff4400">{{ field.label }}</label>
{{ field }} # field是框框,label是框框的一个属性
</p>
{% endfor %}
<input type="submit" value="提交">
</form>
{% for i in cleanData.values %} #cleanData是views里的方法执行后返回的校验后的结果,
{{ i }} # 校验没错就会返回输入过的数据;教研出错,就会返回出错的项
{% endfor %}
(五)自定义校验
只需在第一步的forms.py中的AuthorForm类中加上一个校验函数就行了
(1)因为第三部的views配置中validData = AuthorForm(request.POST)在验证的时候,也会调用类中的这个校验函数进行验证。
(2)为什么用AuthorForm 类进行验证,因为我这个类定义了表单的规范!
(3)想自定义验证,就在AuthorForm这种表单类加函数就好了
(4)验证不合法,cleanData = validData.errors执行后,cleanData就会保存返回的不合法内容,如自定义校验函数中的
self.add_error("name","非法命名")