Forms#-表单基础

2017-09-22  本文已影响0人  wangfp

在Django中创建表单


Django的Form classes


更多的表单类型

# forms.py
from django import forms

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField(widget=forms.Textarea)
    sender = forms.EmailField()
    cc_myself = forms.BooleanField(required=False)

widgets
每个表单列都有一个对应的widget class用来指定HTML的表单中<input>标签的type属性
大多数情况下,每个field都有自己默认的widget,但我们也可以通过widget参数来显式地指定需要的type类型

成功提交的数据会以字典的形式保存在表单对象的cleaned_data属性中

# views.py
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']

注意,一些字段需要其它的处理方式;比方上传的文件就位于request.FILES


处理模板中的表单

{{ form }}模板变量将根据定义字段自动生成<label><input>标签
{{ form.as_p }}, {{ form.as_table }}, {{ from.as_ul }}将会在每个表单列上分别添加<p>, <tr><li>标签(不要忘记<table><ul>标签的使用)
上边ContactForm通过{{ from.as_p }}得到的HTML表单:

<p><label for="id_subject">Subject:</label>
    <input id="id_subject" type="text" name="subject" maxlength="100" required /></p>
<p><label for="id_message">Message:</label>
    <textarea name="message" id="id_message" required></textarea></p>
<p><label for="id_sender">Sender:</label>
    <input type="email" name="sender" id="id_sender" required /></p>
<p><label for="id_cc_myself">Cc myself:</label>
    <input type="checkbox" name="cc_myself" id="id_cc_myself" /></p>

注意Django会自动生成labelid


Form API

上一篇下一篇

猜你喜欢

热点阅读