美文网首页
Django中form的使用

Django中form的使用

作者: slowrabbit | 来源:发表于2016-04-24 22:30 被阅读2091次

在很多比方登录,页面是一个表单,点击提交按钮后,会进行数据的提交。在Django中,有专门的类来对应表单(封装成form类)。接下来我们说说form类的使用。

1 Form类的一般写法

  • 1)定义定义Form的每个字段(没有对应的Model);另一个点是Django用widget来定义数据项的格式,比如密码这栏,可以如此定义。widget为密码格式的文本字段,label表示这栏的标签为密码,require表示需要输入:
password = forms.CharField(widget=forms.PasswordInput(),
        label=u'密码',
        required=True)
  • 2)定义Meta子类,包括显示的fields(常常用于继承ModelView时,设定对应的Model类)

  • 3)对字段进行校验

    • clean_字段名():这个方法是对指定的字段进行校验。
    • clean(): 对整个表单的校验。
      ps: 一般讲都会现需要调用super进行父类字段的校验,但当你完全自己控制表单的校验的时候,请不要调用super。我再写重置密码的时候,一直提示我说这个用户已存在,就是因为我继承的父类对用户这个字段进行校验
    • 校验失败:如果你想失败时进行提醒,请: raise forms.ValidationError('message')
    • 返回值:正常的话,如果是clean_字段,返回这个字段;如果是clean方法,则返回self.cleaned_data

2 view中使用Form

  • 1) 使用form
    经常使用的form是将request.POST作为参数,将提交的数据变成一个form类的实例,:form = self.form_class(request.POST)
  • 2) 使用校验过的数据:
    使用form.valid()方法,如果通过,则通过form.cleaned_data[属性]or form.cleaned_data.get(属性)

3 Django Form的校验机制

对于Django的校验机制,官方文档有详细的描述,大致如下:

  • 1)字段子类的检验:分三部分,首先是进行to_python转换成Python类,然后使用validate进行特定的验证,最后是run_validators运行所有的校验,并异常收集;

  • 2)clean_字段:这个前面提到过,对于自定义的校验,可以在这里进行校验。和1)区别的是它并不是做字段类型等验证,可以认为是做一些业务性要求的字段验证。比如说指定公司的邮箱,可以在此做正则校验;

  • 3)clean方法:对表单进行验证,比如重置密码,要确认输入的现有密码是正确的,然后新输入的两次密码需要相等,这样的操作可以放置在此处校验。(再次提醒,注意何时调用super方法进行校验)
    官方文档

  • 4)关于何时使用Model类:我的肤浅认识是,如果Model中正好和Form字段是一致的,可以使用;否则需要自己定义form的字段。

4 小结

Form 和View有很多写好的,可以进行继承。当然开始的时候,会非常痛苦,因为不知道有什么,也不知里面有什么可以直接使用的方法。这个没有什么捷径,还是多查多用。当然,是在找不到答案,可以看看源代码的过程。

相关文章

  • Django中form的使用

    在很多比方登录,页面是一个表单,点击提交按钮后,会进行数据的提交。在Django中,有专门的类来对应表单(封装成f...

  • 10 Form表单

    一:什么是Form?什么是Django Form Django的表单系统中,所有的表单类都作为django.for...

  • Form类学习笔记

    Django的表单功能由Form类实现 分为两种 django.forms.Form 和 Django.forms...

  • Python Web开发系列课程之——初探 Django Adm

    【前置课程】Django中Form的妙用 Django Admin 是 Django 框架中最受欢迎的特性之一。该...

  • The Django Book 第七章 表单(2)

    本书网站链接 这一章节讲述 form类的编写表单 form类基础使用:Django带有一个form库,称为djan...

  • Django教程--Form表单

    Django教程--Form表单 前面我们已经了解如何在django中使用GET、POST传递数据,但是我们并没有...

  • form表单Django

    在Django 中构建一个表单 Form 类 初始化form组件需要继承Form,username 相当于在创建的...

  • Django 表单类详解

    本文纯手工搬运,为自己学习记录使用. Django带有一个form库,称为django.forms 表单框架最主要...

  • Django ModelForm and Form

    django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm 关...

  • Python Form组件

    Django之Form组件

网友评论

      本文标题:Django中form的使用

      本文链接:https://www.haomeiwen.com/subject/stvfrttx.html