Django知识碎片整理(二)

碎片一: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)

猜你喜欢

转载自blog.csdn.net/BearStarX/article/details/87975648