Django框架(十七):Form组件之基本功能初识

前言在前端页面输入数据,数据进入数据库或者后台逻辑之前,往往需要对数据的类型、格式、长度等一系列属性进行验证;若仅仅使用js前端验证或后端代码验证这显得十分麻烦;于是有了Form组件存在的意义

一、Form组件的作用、基本使用

ajax方式提交数据与下面form表单提交有些许不同,因为ajax本身在错误的情况下不刷新页面;https://blog.csdn.net/ak739105231/article/details/83958344

下面是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数据的图:

发布了232 篇原创文章 · 获赞 141 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/ak739105231/article/details/103832294