您的位置:首页 > 编程语言 > Go语言

[原]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指定列名
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: