Django的Form类
Django表单系统的核心组件是Form类。Form类描述一张表单并决定它如何工作及呈现。
类似于模型类的字段映射到数据库字段的方式,表单类的字段会映射到HTML表单的<input>元素。
构建一张表单
示例
<form action="/your-name/" method="post">
<label for="your_name">Your name: </label>
<input id="your_name" type="text" name="your_name" value="{{ current_name }}">
<input type="submit" value="OK">
</form>
浏览器将表单返回给URL/your-name/,并使用POST方法。
提交表单时,发送给服务器的POST请求将包含表单数据。
在Django中构建一张表单
# forms.py
from django import forms
class NameForm(forms.Form):
your_name = forms.CharField(label='Your name', max_length=100)
表单实例有一个is_valid()方法,该方法为其所有字段运行验证。如果所有字段包含有效数据,它将返回
- 返回True
- 将表单的数据放到它的属性cleaned_data中
视图
# views.py
from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import NameForm
def get_name(request):
# if this is a POST request we need to process the form data
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = NameForm(request.POST)
# check whether it's valid:
if form.is_valid():
# process the data in form.cleaned_data as required
# ...
# redirect to a new URL:
return HttpResponseRedirect('/thanks/')
# if a GET (or any other method) we'll create a blank form
else:
form = NameForm()
return render(request, 'name.html', {'form': form})
form = NameForm(request.POST)是绑定数据到表单。
通过调用表单的is_valid()方法;如果不为True,将带着表单回到模板。
如果为True,就能在其cleaned_data属性中找到所有通过验证的表单数据。
详解Django Form类
所有表单类都作为django.forms.Form或者django.forms.ModelForm的子类来创建。
绑定的和未绑定的表单实例
-
未绑定的表单没有与其关联的数据。当渲染给用户的时候,它会是空的或者包含默认值。
-
绑定的表单拥有已提交的数据,因此可以用来判断数据是否合法。
字段数据
无论用表单提交了什么数据,一旦通过调用is_valid()验证成功,已验证的表单数据将被放到form.cleaned_data字典中。
示例
- 在视图中处理表单数据
from django.core.mail import send_mail
if form.is_valid():
subject = form.cleaned_data['subject']
message = form.cleaned_data['message']
sender = form.cleaned_data['sender']
cc_myself = form.cleaned_data['cc_myself']
recipients = ['info@example.com']
if cc_myself:
recipients.append(sender)
send_mail(subject, message, sender, recipients)
return HttpResponseRedirect('/thanks/')