参考: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类。这里只用到CharField和EmailField类型。
添加字段初始值:
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})
>>>form.is_bound
>>>from.cleaned_data()
# 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>