编写表单类
from django import formsclass MyForm(forms.Form):name = forms.CharField(label='Your name', max_length=100)
- 提前导入forms模块
- 所有的表单类都要继承forms.Form类
- 每个表单字段都有自己的字段类型比如CharField,它们分别对应一种HTML语言中的
<form>元素中的表单元素。这一点和Django模型系统的设计非常相似。 - 例子中的label用于设置说明标签
max_length限制最大长度为100。它同时起到两个作用,一是在浏览器页面限制用户输入不可超过100个字符,二是在后端服务器验证用户输入的长度不可超过100。
每个Django表单的实例都有一个内置的is_valid()方法,用来验证接收的数据是否合法。如果所有数据都合法,那么该方法将返回True,并将所有的表单数据转存到它的一个叫做cleaned_data的属性中,该属性是以个字典类型数据。
当我们将上面的表单渲染成真正的HTML元素,其内容如下:
<label for="your_name">Your name: </label><input id="your_name" type="text" name="your_name" maxlength="100" required />
一定要注意,它不包含<form>标签本身以及提交按钮
视图函数
from django.shortcuts import renderfrom django.http import HttpResponseRedirectfrom .forms import MyForm# Create your views here.def get_name(request):if request.method == 'POST':form = MyForm(request.POST)if form.is_valid():return HttpResponseRedirect('/thanks/')else:form = MyForm()return render(request, 'name.html', {'form', form})
要点是:
- 对于GET方法请求页面时,返回空的表单,让用户可以填入数据;
- 对于POST方法,接收表单数据,并验证;
- 如果数据合法,按照正常业务逻辑继续执行下去;
- 如果不合法,返回一个包含先前数据的表单给前端页面,方便用户修改。
通过表单的is_bound属性可以获知一个表单已经绑定了数据,还是一个空表。
widgets
说明
表单字段负责验证输入并直接在模板中使用。而Widget负责渲染网页上HTML表单的输入元素和提取提交的原始数据。widget是字段的一个内在属性,用于定义字段在浏览器的页面里以何种HTML元素展现。
指定类型
每个字段都有一个默认的widget类型
comment = forms.CharField(widget=forms.Textarea)
这将使用一个Textarea Widget来展现表单的评论字段,而不是默认的TextInput Widget。
参数
指定字段的内容,属性,如下设置了SelectDateWidget的years 属性
BIRTH_YEAR_CHOICES = ('1980', '1981', '1982')birth_year = forms.DateField(widget=forms.SelectDateWidget(years=BIRTH_YEAR_CHOICES))
CSS样式
创建Widget时使用 Widget.attrs参数来更改字段CSS样式
