【django】表单 Form类1(django.forms)

参考:http://docs.30c.org/djangobook2/chapter07/


Form 类

1.为要处理的HTML的`` <Form>`` 定义一个Form类,将类保存到forms.py中,forms.py与views.py同路径即可

from django import forms

class ContactForm(forms.Form):
    subject = forms.CharField()
    email = forms.EmailField(required=False)
    message = forms.CharField()

很像模块中使用的语法, 表单中的每一个字段(域)作为Form类的属性,被展现成Field类。这里只用到CharFieldEmailField类型。


添加字段初始值:

subject = forms.CharField(initial='I love you')


指定标签:

HTML表单中自动生成的标签默认是按照规则生成的:用空格代替下划线,首字母大写。如email的标签是"Email"

email = forms.EmailField(required=False,label='Your e-mail address')


设置字段最大最小长度:

在字段属性中添加属性即可:

subject = forms.CharField(max_length=100 )

subject = forms.CharField(max_length=5 )


改变字段显示:

forms框架把每一个字段的显示逻辑分离到一组部件(widget)中,我们可以通过设置widget=?来改变字段的部件显示

message = forms.CharField(widget=forms.Textarea)

下图是改变前后:




2.在views.py中使用form对象


# views.py

from django.shortcuts import render_to_response
from mysite.contact.forms import ContactForm

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()
    return render_to_response('contact_form.html', {'form': form})

PS:

给form赋值:
form = ContactForm(request.POST)   or  form = ({'subject':'hello','message':'Good boy!'})

检查form是否实体赋值:
>>>form.is_bound
>>>True

检查form是否有效:
>>>form.is_valid()
>>>True


你可以注意检查每个字段的出错消息:
>>>form['message'].errors
>>>[]
如果我们不传入email值,它依然是合法的。因为我们指定这个字段的属性required=False
但是,如果留空subjectmessage,整个Form就不再合法了


如果form实体的数据是合法的,会有一个可用的cleaned_data属性(是一个干净的提交数据的字典):
>>>from.cleaned_data()
>>>{'subject':u'hello','message':u'Good boy!'}




3.在templates文件加下创建:contact_form.html

# contact_form.html

<html>
<head>
    <title>Contact us</title>
</head>
<body>
    <h1>Contact us</h1>

    {% if form.errors %}
        <p style="color: red;">
            Please correct the error{{ form.errors|pluralize }} below.
        </p>
    {% endif %}

    <form action="" method="post">
        <table>
            {{ form.as_table }}
        </table>
        <input type="submit" value="Submit">
    </form>
</body>
</html>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值