Django-表单学习总结

今天将表单这一章看完了,感觉稀里糊涂的,在此做个总结:


1.引入:from django import forms

2.自定义表单类:

<span style="font-size:18px;">#form.py
class ContactForm(forms.form):
       subject=forms.CharField(max_length="20")
       email = forms.EmailField(required=False)
    #自定义校验函数:
  #以clean_开头,以字端名称结束
  #此类方法将在默认校验后自动执行
   def clean_subject(self):
        subject=self.cleaned_data['subject']
        num_words=len(subject.split())
       if num_words>20:
            raise forms.ValidationError(' 敢不敢再长点?')
       return subject #若不返回,则用户原来输入的将丢失</span>

3.表单类的说明:

  创建表单类对象:

       1⃣️:f=ContactForm()

          说明:创建不带任何数据的纯表单

       2⃣️:f=ContactForm(request.GET或request.POST)

          说明:创建带有数据的表单。ps:仅当提交表单内容后,request.GET/POST才有                       效,即request.method才有值

  表单类的方法:

      1⃣️ f.as_table()/as_ul()/as_p:返回以表格/列表/段落,形式定义的表单的html,其中

          <table>,<ul>,<form>的始末标记不再其中,这样就可以自定义添加一些内容:

          以table形式的输出:

    

<tr><th><label for="id_subject">Subject:</label></th><td><input type="text" name="subject" id="id_subject" /></td></tr>
<tr><th><label for="id_email">Email:</label></th><td><input type="text" name="email" id="id_email" /></td></tr>
<tr><th><label for="id_message">Message:</label></th><td><input type="text" name="me

 
以列表形式的输出: 
<li><label for="id_subject">Subject:</label> <input type="text" name="subject" id="id_subject" /></li>
<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" /></li>
以段落形式的输出:
<p><label for="id_subject">Subject:</label> <input type="text" name="subject" id="id_subject" /></p>
<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" /></p>

         2⃣️.f['subject']:显示指定字段的html,如下         

               <input type="text" name="subject" id="id_subject" />

             注意:在html中要使用f.subject而不是f['subject'],否则在运行时会出现错误提示这类没有这个属性。

      3⃣️.f.errors:得到这个表单的所有输入错误信息的一个字典:          

>>> f.errors
{'message': [u'This field is required.']}

     4⃣️.f['subject'].errors:返回该字段输入的错误信息的一个列表,若没有错误信息,则返回空列表,在html中形式为f.subject.errors

f['subject'].errors
[]
   5⃣️f.is_vaild():

       返回布尔,判断所输入的数据是否全部合法

  6⃣️ f.cleaned_data:

      返回一个包含字段名称和相应的值的字典,该方法把它们转换成相应的Python类型数据,比如字符串将被转换为Unicode对象,整形将被转化为python的整形

f.cleaned_data
{message': uNice site!, email: uadrian@example.com, subject: uHello}

4.定义相应的html文件:

  有了上面的基础,我们就可以定义view.py和html 文件了。

  我的html文件:

          

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>联系人</title>
</head>
<body>
 {% if form.errors %}
  <p style="color:red">
      Please correct the flow error{{ form.errors|pluralize }}
  </p>
 {% endif %}

 <form action="" method="post">
        <table border="1">
         <tr><td><lable for="id_subjec">subject</lable></td>
             <td>{{ form.subject}}</td>
             <td>{{ form.subject.errors }}</td>
        </tr>
        <tr><td><lable for="id_message">message</lable></td>
             <td>{{ form.message}}</td>
             <td>{{ form.message.errors }}</td>
        </tr>
        <tr><td><lable for="id_email">email</lable></td>
             <td>{{ form.email}}</td>
             <td>{{ form.email.errors }}</td>
        </tr>
        </table>

   <input type="submit" value="submit">
 </form>

</body>
</html>

 5.我的视图代码:

            

def new_contact(request):

    if request.method=='POST':
        form=contact_form(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('/conatct/thaks')
        else:
            return render_to_response('contact_form_new.html',{'form':form})
    else:
         form=contact_form(
             initial={'subject':'i love  you'}
         )
         return render_to_response('contact_form_new.html',{'form':form})

   


             

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值