[原]Django book 学习笔记_第七章 …
2012-11-05 17:44
441 查看
表单类
·表单的定义
from django import forms
class ContactForm(forms.Form):
subject =
forms.CharField()
email =
forms.EmailField(required=False)
message =
forms.CharField()
·表单的输出
··便捷输出
print f.as_table()/f.as_ul()/f.as_p()
分别以HTML中table,ul 和p元素的形式输出、
table:
<tr><th><label
for="id_subject">Subject:</label></th><td><input
type="text" name="subject" id="id_
<tr><th><label
for="id_email">Email:</label></th><td><input
type="text" name="email" id="id_email"
<tr><th><label
for="id_message">Message:</label></th><td><input
type="text" name="message" id="id_
ul:
<li><label
for="id_subject">Subject:</label>
<input type="text" name="subject" id="id_subject"
/><
<li><label
for="id_email">Email:</label>
<input type="text" name="email" id="id_email"
/></li>
<li><label
for="id_message">Message:</label>
<input type="text" name="message" id="id_message"
/><
p:
<p><label
for="id_subject">Subject:</label>
<input type="text" name="subject" id="id_subject"
/></
<p><label
for="id_email">Email:</label>
<input type="text" name="email" id="id_email"
/></p>
<p><label
for="id_message">Message:</label>
<input type="text" name="message" id="id_message"
/></
其中以table和ul形式输出时自行添加<table></table>和<ul></ul>
··个别字段输出
>>> print
f['subject']
<input type="text" name="subject"
id="id_subject" />
>>> print
f['message']
<input type="text" name="message"
id="id_message" />
·form的绑定
>>> f =
ContactForm({'subject': 'Hello', 'email': 'adrian@example.com',
'message': 'Nice site!'})
#一旦你对一个Form实体赋值,你就得到了一个绑定form——f.is_bound为True
·检查form的合法性
f.is_valid()#注意,是函数
当不满足表单字段的限制条件时(比如说required),该函数返回False
·检查出错信息
逐一查看每个字段的出错消息:
>>> f =
ContactForm({'subject': 'Hello', 'message': ''})
>>>
f['message'].errors
...[u'This field is required.']
>>>
f['subject'].errors
...[]
>>>
f['email'].errors
...[]
查看整体错误信息:
>>> f =
ContactForm({'subject': 'Hello', 'message': ''})
>>>
f.errors
...{'message': [u'This field is
required.']}#一个字段与错误消息相映射的字典表
·干净的提交数据
清洁数据,即是将提交的数据转换为python类型的数据。当表单数据合法时可用:
>>> f =
ContactForm({subject': Hello, email: adrian@example.com, message:
Nice site!})
>>>
f.is_valid()
True
>>>
f.cleaned_data
{message': uNice site!, email: uadrian@example.com, subject:
uHello}
·改变字段显示
from django import forms
class ContactForm(forms.Form):
subject =
forms.CharField()
email =
forms.EmailField(required=False)
message =
forms.CharField(**widget=forms.Textarea** )
利用关键字参数 widget
·设置最大长度
在字段声明中采用max_length参数即可
·设置初始值
def contact(request):
if request.method ==
'POST':
form = ContactForm(request.POST)
if form.is_valid():
cd =
form.cleaned_data
send_mail(
cd['subject'],
cd['message'],
cd.get('email',
`'noreply@example.com`_'),
[`'siteowner@example.com`_'],
)
return
HttpResponseRedirect('/contact/thanks/')
else:
form = ContactForm(
**initial={'subject': 'I love your site!'}**
)
return
render_to_response('contact_form.html', {'form': form})、
·自定义校验规则
例:
增加一个`` clean_message()`` 方法到`` Form`` 类:
from django import forms
class ContactForm(forms.Form):
subject =
forms.CharField(max_length=100)
email =
forms.EmailField(required=False)
message =
forms.CharField(widget=forms.Textarea)
def
clean_message(self):
message = self.cleaned_data['message']
num_words = len(message.split())
if num_words < 4:
raise
forms.ValidationError("Not enough words!")
return
message#必须返回这个字段的值,否则None会被返回,原始数据将丢失。
Django的form系统自动寻找匹配的函数方法,该方法名称以 clean_开头,并以字段名称结束。
如果有这样的
方法,将在指定字段的默认校验逻辑执行* 之后*
被调用。所以不必担心传到自定义检验方法的字段的值不满足默认的校验逻辑。是从self.cleaned_data
中提取出来的。
·指定标签
在字段中使用label参数。与model类似,model使用verbose_name指定列名
·表单的定义
from django import forms
class ContactForm(forms.Form):
subject =
forms.CharField()
email =
forms.EmailField(required=False)
message =
forms.CharField()
·表单的输出
··便捷输出
print f.as_table()/f.as_ul()/f.as_p()
分别以HTML中table,ul 和p元素的形式输出、
table:
<tr><th><label
for="id_subject">Subject:</label></th><td><input
type="text" name="subject" id="id_
<tr><th><label
for="id_email">Email:</label></th><td><input
type="text" name="email" id="id_email"
<tr><th><label
for="id_message">Message:</label></th><td><input
type="text" name="message" id="id_
ul:
<li><label
for="id_subject">Subject:</label>
<input type="text" name="subject" id="id_subject"
/><
<li><label
for="id_email">Email:</label>
<input type="text" name="email" id="id_email"
/></li>
<li><label
for="id_message">Message:</label>
<input type="text" name="message" id="id_message"
/><
p:
<p><label
for="id_subject">Subject:</label>
<input type="text" name="subject" id="id_subject"
/></
<p><label
for="id_email">Email:</label>
<input type="text" name="email" id="id_email"
/></p>
<p><label
for="id_message">Message:</label>
<input type="text" name="message" id="id_message"
/></
其中以table和ul形式输出时自行添加<table></table>和<ul></ul>
··个别字段输出
f['subject']
<input type="text" name="subject"
id="id_subject" />
f['message']
<input type="text" name="message"
id="id_message" />
·form的绑定
>>> f =
ContactForm({'subject': 'Hello', 'email': 'adrian@example.com',
'message': 'Nice site!'})
#一旦你对一个Form实体赋值,你就得到了一个绑定form——f.is_bound为True
·检查form的合法性
f.is_valid()#注意,是函数
当不满足表单字段的限制条件时(比如说required),该函数返回False
·检查出错信息
逐一查看每个字段的出错消息:
>>> f =
ContactForm({'subject': 'Hello', 'message': ''})
>>>
f['message'].errors
...[u'This field is required.']
>>>
f['subject'].errors
...[]
>>>
f['email'].errors
...[]
查看整体错误信息:
>>> f =
ContactForm({'subject': 'Hello', 'message': ''})
>>>
f.errors
...{'message': [u'This field is
required.']}#一个字段与错误消息相映射的字典表
·干净的提交数据
清洁数据,即是将提交的数据转换为python类型的数据。当表单数据合法时可用:
>>> f =
ContactForm({subject': Hello, email: adrian@example.com, message:
Nice site!})
>>>
f.is_valid()
True
>>>
f.cleaned_data
{message': uNice site!, email: uadrian@example.com, subject:
uHello}
·改变字段显示
from django import forms
class ContactForm(forms.Form):
subject =
forms.CharField()
email =
forms.EmailField(required=False)
message =
forms.CharField(**widget=forms.Textarea** )
利用关键字参数 widget
·设置最大长度
在字段声明中采用max_length参数即可
·设置初始值
def contact(request):
if request.method ==
'POST':
form = ContactForm(request.POST)
if form.is_valid():
cd =
form.cleaned_data
send_mail(
cd['subject'],
cd['message'],
cd.get('email',
`'noreply@example.com`_'),
[`'siteowner@example.com`_'],
)
return
HttpResponseRedirect('/contact/thanks/')
else:
form = ContactForm(
**initial={'subject': 'I love your site!'}**
)
return
render_to_response('contact_form.html', {'form': form})、
·自定义校验规则
例:
增加一个`` clean_message()`` 方法到`` Form`` 类:
from django import forms
class ContactForm(forms.Form):
subject =
forms.CharField(max_length=100)
email =
forms.EmailField(required=False)
message =
forms.CharField(widget=forms.Textarea)
def
clean_message(self):
message = self.cleaned_data['message']
num_words = len(message.split())
if num_words < 4:
raise
forms.ValidationError("Not enough words!")
return
message#必须返回这个字段的值,否则None会被返回,原始数据将丢失。
Django的form系统自动寻找匹配的函数方法,该方法名称以 clean_开头,并以字段名称结束。
如果有这样的
方法,将在指定字段的默认校验逻辑执行* 之后*
被调用。所以不必担心传到自定义检验方法的字段的值不满足默认的校验逻辑。是从self.cleaned_data
中提取出来的。
·指定标签
在字段中使用label参数。与model类似,model使用verbose_name指定列名
相关文章推荐
- [原]Django book学习笔记_第五章 …
- Linux&nbsp;学习笔记【3】&nbsp;条件判断
- Adobe&nbsp;Flex学习笔记(10)-&nbsp;Flex保…
- Java学习笔记7 面向对象设计的三大…
- Java学习笔记25 java注解(annotat…
- 《thinking&nbsp;in&nbsp;java》学习笔记10
- &nbsp;QTP&nbsp;学习笔记
- Linux&nbsp;学习笔记【2】&nbsp;引用变量
- Java学习笔记8 面向对象之封装2
- Java学习笔记26 异常Exception
- django_book学习笔记7-django常用方法总结
- 【转】VIM学习笔记&nbsp;配置文件(…
- Adobe&nbsp;Flex学习笔记(12)-&nbsp;e4x
- django学习笔记【001】django版本的确定&创建一个django工程
- linux dev/dsp 声卡学习笔记
- Java学习笔记10 面向对象之重载
- Java学习笔记27 将数字转换为中文…
- Django Book 学习笔记(上)
- vbscript&nbsp;脚本学习笔记不断更新&lt;二…
- Adobe&nbsp;Flex学习笔记(13)-&nbsp;在图片…