+ -
当前位置:首页 → 问答吧 → django表单的应用

django表单的应用

时间:2009-08-30

来源:互联网

在看文档的时候一直觉得django的表单设计是很酷的东西,今天花了点时间研究一下,掌握的还不多,不过已经能实现不少的东西,当然是在编写极少代码的情况下。不然研究它的表单就没有意义了。

我目前使用的Django版本是1.1 beta.所以是继承于forms来实现的表单系统
from django import forms

第一步:首先在models.py中定义一个表单模型

class RemarkForm(forms.Form):
        subject = forms.CharField(max_length=100 ,label='留言标题')
        mail = forms.EmailField(label='电子邮件')
        topic = forms.ChoiceField(choices=TOPIC_CHOICES,label='选择评分')  
        message = forms.CharField(label='留言内容',widget=forms.Textarea)
        cc_myself = forms.BooleanField(required=False ,label='订阅该贴')


那个topic中的choices需要在models.py中定义一个数组.
TOPIC_CHOICES = (
        ('leve1', '差评'),
        ('leve2', '中评'),
        ('leve3', '好评'),
)


这样,之后在html显示的表单就采用这个模型的数据了。

另外还有一种定义表单模型的方式,那就是直接继承另一个models。如果我们在models里设计数据库时,已经设计好了一个类(就是数据库的表)之后想复用这个类的信息来作为表单的模型,那么很简单,同样是在models中的一个类
class Advertisement(models.Model):
  #订单编号
  OrderID    =     models.ForeignKey(OrderInfo)
  #//广告标题#
  Title    =    models.CharField(max_length = 36)
  #//广告内容#
  Content    =    models.CharField(max_length = 600)

注意,他的类型是models.Model,是做数据库ORM用的。

然后怎么关联呢?
需要导入一个新的类 (ModelForm)
from django.forms import ModelForm

class ContactForm(ModelForm):
  class Meta:
    model = Advertisement
    fields = ('Title', 'CustomerID')


这里的Advertisement就是之前那个ORM的模型。


第二步:OK,继续我们的表单,下一步需要做什么呢?开始在views.py里写对表单的调用吧.
def remark(request):


        if request.method == 'POST': # 如果表单被提交
                form = ContactForm(request.POST) # 获取Post表单数据
                if form.is_valid(): # 验证表单
                        return HttpResponseRedirect('/') # 跳转
        else:
                form = ContactForm() #获得表单对象
               
        return render_to_response('message.html', {
                'form': form,
        })


整个代码很简单,我就不过多的解释了。


第三步:我们知道django里任何访问都是通过urls.py来管理的。所以下面我们需要配置一个路径。

  (r'^message', 'iring.views.remark'),


第四步:最后应该是建立一个模板的时候了,因为我们最终是输出到html上的.注意views的remark函数最后一行
        return render_to_response('message.html', {
                'form': form,
        })


就是讲当前的表单对象输出到message.html里,自动生成一个表单。
所以,先构建一个html.
这个html模板很简单,除去不必要的CSS,我只给出核心部分好啦。
  <form action="/message/" method="POST">
    {% for field in form %}
      <div class="fieldWrapper">
         {{ field.label_tag }}:{{ field }}
         {{ field.errors }}
      </div>
    {% endfor %}
    <div class="fieldWrapper"><p><input type="submit" value="留言" /></p></div>
  </form>


{% for field in form %}

{% endfor %}
用于对表单对象里的元素进行遍历,然后通过
{{ field.label_tag }}
{{ field }}
{{ field.errors }}
这三个标签来输出,注意{{ field.errors }}默认情况下是不会输出的,只有当验证表单正确性时才会输出内容。

最终我们通过
http://youdjangourl/message来访问这个例子










[ 本帖最后由 阿汐 于 2009-8-31 10:19 编辑 ]

作者: 阿汐   发布时间: 2009-08-30

是C#写的?

作者: ribut9225   发布时间: 2009-08-31

算是python写的

作者: 阿汐   发布时间: 2009-08-31

感谢楼主

作者: magichupq   发布时间: 2009-09-17

原文:
第二步:OK,继续我们的表单,下一步需要做什么呢?开始在views.py里写对表单的调用吧.
def remark(request):


        if request.method == 'POST': # 如果表单被提交
                form = ContactForm(request.POST) # 获取Post表单数据
                if form.is_valid(): # 验证表单
                        return HttpResponseRedirect('/') # 跳转
        else:
                form = ContactForm() #获得表单对象
               
        return render_to_response('message.html', {
                'form': form,
        })
**********************************************************************************
报错:
Exception Type: NameError
Exception Value: global name 'ContactForm' is not defined
**********************************************************************************
这里头怎么定义的?

作者: twenty_four   发布时间: 2011-11-11

热门下载

更多