美文网首页Python小哥哥
Django Form和ModelForm组件

Django Form和ModelForm组件

作者: 我爱学python | 来源:发表于2019-05-10 16:28 被阅读10次

    Form介绍 

    我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。

    与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确。如果用户输入的内容有错误就需要在页面上相应的位置显示对应的错误信息.。

    Django form组件就实现了上面所述的功能。

    总结一下,其实form组件的主要功能如下:

    生成页面可用的HTML标签

    对用户提交的数据进行校验

    保留上次输入内容

    普通方式手写注册功能

    views.py

    login.html

    使用form组件实现注册功能

    views.py

    先定义好一个RegForm类:

    再写一个视图函数:

    login2.html

    看网页效果发现 也验证了form的功能:

    •前端页面是form类的对象生成的                                      -->生成HTML标签功能

    •当用户名和密码输入为空或输错之后 页面都会提示        -->用户提交校验功能

    •当用户输错之后 再次输入 上次的内容还保留在input框   -->保留上次输入内容

    Form那些事儿

    常用字段与插件

    创建Form类时,主要涉及到 【字段】 和 【插件】,字段用于对用户请求数据的验证,插件用于自动生成HTML;

    initial

    初始值,input框里面的初始值

    error_messages

    重写错误信息。

    password

    radioSelect

    单radio值为字符串

    单选Select

    多选Select

    单选checkbox

    多选checkbox

    choice字段注意事项

    在使用选择标签时,需要注意choices的选项可以配置从数据库中获取,但是由于是静态字段 获取的值无法实时更新,需要重写构造方法从而实现choice实时更新。

    方式一:

    方式二:

    Django Form所有内置字段


    字段校验

    RegexValidator验证器

    自定义验证函数

    Hook方法

    除了上面两种方式,我们还可以在Form类中定义钩子函数,来实现自定义的验证功能。

    局部钩子

    我们在Fom类中定义 clean_字段名() 方法,就能够实现对特定字段进行校验。

    举个例子:

    全局钩子

    我们在Fom类中定义 clean() 方法,就能够实现对字段进行全局校验。

    补充进阶

    应用Bootstrap样式

    批量添加样式

    可通过重写form类的init方法来实现。

    ModelForm

    通常在Django项目中,我们编写的大部分都是与Django 的模型紧密映射的表单。 举个例子,你也许会有个Book 模型,并且你还想创建一个form表单用来添加和编辑书籍信息到这个模型中。 在这种情况下,在form表单中定义字段将是冗余的,因为我们已经在模型中定义了那些字段。

    基于这个原因,Django 提供一个辅助类来让我们可以从Django 的模型创建Form,这就是ModelForm。

    modelForm定义

    form与model的终极结合。

    class Meta下常用参数:

    ModelForm的验证

    与普通的Form表单验证类型类似,ModelForm表单的验证在调用is_valid() 或访问errors 属性时隐式调用。

    我们可以像使用Form类一样自定义局部钩子方法和全局钩子方法来实现自定义的校验规则。

    如果我们不重写具体字段并设置validators属性的化,ModelForm是按照模型中字段的validators来校验的。

    save()方法

    每个ModelForm还具有一个save()方法。 这个方法根据表单绑定的数据创建并保存数据库对象。 ModelForm的子类可以接受现有的模型实例作为关键字参数instance;如果提供此功能,则save()将更新该实例。 如果没有提供,save() 将创建模型的一个新实例:

    相关文章

      网友评论

        本文标题:Django Form和ModelForm组件

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