Django框架(十七):Form组件之基本功能初识
前言:在前端页面输入数据,数据进入数据库或者后台逻辑之前,往往需要对数据的类型、格式、长度等一系列属性进行验证;若仅仅使用js前端验证或后端代码验证这显得十分麻烦;于是有了Form组件存在的意义;
一、Form组件的作用、基本使用
1.1 Form组件的作用
1.对用户请求的参数进行验证(包括ajax请求、form表单请求)
2.生成HTML代码
3.可以自定义数据的不同错误的提示信息,返回给前端
1.2 Form组件的基本使用
举例场景说明:首先创建一个django的project,进行一系列的配置之后,添加app02应用,然后在其models.py中,创建一个表usersinfo;除id外仅包含两个字段:username、email;
ok,现在开始基于这个场景进行布置截图、代码截取的说明:
步骤一:创建一个class类,继承forms.Form
在views.py里(或者自己另外创建py文件放在app02应用中,到时候在view.py中import)首先import导入django下的forms包及django.forms下的fields包。然后,创建一个class类,继承forms.Form;该类里面编写的需要验证的字段(注意:字段名称最好与数据库名称一致,后面会解释其好处)
基本字段解释:
max_length:字符最大长度;min_length:字符最小长度;required=True时,不可为空;为False时,可以为空;(注意:没有填写即不限制)
error_messages字段,里面是键值对;若没有自定义error_messages字段,也会有默认的error_messages信息,全是英文;
步骤二:继承forms.Form的类如何在后端、前端使用,如何保存数据进入数据库?
举例1:添加用户功能;
后端函数截图:后端返回前端页面,传入:Form组件实例化的对象;两种情况:
1.GET方式进入添加页面时,后端代码Form组件实例化的对象(无任何值传入),前端页面只需显示输入框以及相关字段名称;
2.POST方式保存触发时,后端代码Form组件实例化的对象(传入request.POST),is_valid返回Form组件对数据的验证结果,若True:验证成功,使用字段名称=Form组件实例化对象。cleaned_data['字段名称']添加入数据库;若Flase:前端依旧显示在添加用户页面,不过此时需要,显示输入内容,及错误提示信息error_messages;
前端html文件截图:前端html在接到后端传入的Form实例化对象user_obj时,利用{{ 对象。字段名称}}及{{对象。errors。字段名称。0}}的方式获取对应值以及生成对应的html脚本。
Web运行结果页面截图:可以看出页面Form组件的作用:1.验证数据;2.生成html脚本
举例2:数据编辑功能;
后端函数截图:edit页面与添加页面唯一的区别就是,一开始进入页面就需要显示每一个字段的原有值;
前端html脚本截图:前端html在接到后端传入的Form实例化对象user_obj时,利用{{ 对象。字段名称}}及{{对象。errors。字段名称。0}}的方式获取对应值以及生成对应的html脚本;id主要是在form标签的action链接中使用;
Web端显示结果截图:
问:Form组件的类(即:继承forms.Form的类)里面的字段与数据库的字段名称保持一致的好处在哪儿呢?
答:当输入的数据被From组件验证后,is_valid()返回结果为True时,即表示数据验证正确;这时我们需要与数据库交互(要么创建数据、要么修改数据),需要使用:Form组件实例化对象。cleaned_data['字段名称']
一般的方式:
models.UserInfo.objects.create( username=user_obj.cleaned_data['username'], email=user_obj.cleaned_data['email'], 字段3=user_obj.cleaned_data['字段3'], ………… )
若:Form组件的类(即:继承forms.Form的类)里面的字段与数据库的字段名称保持一致:
一句话即可:**Form组件实例化对象。cleaned_data
models.UserInfo.objects.create( **user_obj.cleaned_data )
简单的截一个update数据的图: