碎片一:Django窗体Form的使用
下面是django窗体form的实例:
#!/user/bin/env python
#!encoding=utf-8
from django import forms
'''django窗体应用'''
class ContactForm(forms.Form):
CITY=[
['TP','Taipei'],
['TY','Taoyuang'],
['TC','Taichuang'],
['TN','Tainan'],
['KS','Kaohsiung'],
['NA','Others'],
]
user_name=forms.CharField(label='您的姓名',max_length=50,initial='李大仁')
user_city=forms.ChoiceField(label='居住城市',choices=CITY)
user_school=forms.BooleanField(label='是否在学',required=False)
user_email=forms.EmailField(label='电子邮件')
user_message=forms.CharField(label='您的意见',widget=forms.Textarea)
下面是常见的字段格式设置方法:
字段格式名称 | 用法 | 说明 |
CharField | CharField(label='您的姓名',max_length=50,initial='李大仁') | label为本字段的标签(以下皆同),max_length设置长度为50,initial为字段中的默认值 |
ChoiceField | ChoiceField(label=‘居住城市’,choices=CITY) | 设置下拉式菜单(即<select>标签),后面须与choices参数指定一个二维列表,如程序中的CITY |
BooleanField | BooleanField(label=‘是否在学’,required=False) | 布尔值的字段,即checkbox标签,若required设置为False,则此checkbox在输入时也可以不用勾选 |
EmailField | EmailField(label=‘电子邮件’) | 具email验证功能的字段 |
CharField+forms.Textarea | CharField(label=‘您的意见’,widget=forms.Textarea) | 在CharField中以widget=forms.Textarea来扩展称为大量文字输入的字段,即<textarea>标签 |
在urls下配置相关的pattern,对应到views的函数,然后在views函数下写下函数代码:
def contact(request):
'''form窗体'''
form=ContactForm()
return render(request,'contact.html',{'form':form})
最后编辑contact.html文件
<!-- contact.html -->
{% extends 'base.html' %}
{% block title %}联络管理员{% endblock %}
{% block content %}
<div class="container">
{% if message %}
<div class="alert alert-warning">{{ message }}</div>
{% endif %}
<div class="panel panel-primary">
<div class="panel-heading">
<form name="my_form" action="." method="post">
{% csrf_token %}
<h3>写信给管理员</h3>
</div>
<div class="panel-body">
{{ form.as_p }}
</div>
<div class="panel-footer">
<input type="submit" value="提交">
</form>
</div>
</div>
</div>
{% endblock %}
在上面我们可以看到利用了变量form与bootstrap的panel进行联合使用,在panel-body中使用到了{{ form.as_p }},下面对此进行介绍:
1、form.as_p:会以<p>段落格式的方式产生窗体的字段内容(但是并不会产生<form>...</form>,还有sumbit按钮也不会产生)
2、form.as_table:会以<table>段落格式的方式产生窗体的字段内容(但是并不会产省<table>...</table>,在网页中要自行加上这两个标签才能得到工整的排版)
3、from.as_ul:会以<ul>段落格式的方式产生窗体的字段内容,与上面相同
碎片二:接收Form的数据信息
先利用if判断请求的类型是否是template中设置的请求类型,如果是则开始检查并处理数据,若不是,那么就维持显示窗体的方式,实例如下:
def contact(request):
'''form窗体'''
#判断是否是post请求
if request.method=='POST':
form = ContactForm(request.POST)
#检查数据合法性
if form.is_valid():
message='感谢您的来信。'
else:
message='请检查您输入的信息是否正确!'
else:
form=ContactForm()
message='每个字段都必须输入...'
return render(request,'contact.html',{'form':form,'message':message})
可以看到接收Form的数据利用form=ContactForm(request.POST)