多对多第三张表的创建方式 和 forms组件的使用
目录
1|0一、多对多第三张表的创建
- 共有三种创建方式:全自动,纯手撸,半自动
- 推荐使用半自动方式
1|11. 全自动方式
(1)实现代码
(2)优点和不足
-
优点
- 全部都是由orm自动帮你创建的
- 还内置了四个操作第三张表的方法:
add, remove, set, clear
-
不足:
- 自动创建的第三张表无法扩展个修改字段,表的扩展性较差
1|22. 纯手撸方式(了解)
(1)实现代码
(2)优点和不足
-
优点:
- 第三张表中字段个数和字段名称全都可以自己定义
-
不足:
- 不再支持orm跨表查询
- 不再有正反向的概念
- 不支持内置了四个操作第三张表的方法:
add, remove, set, clear
1|33. 半自动方式(推荐使用)
(1)实现代码
- 注意:代码中的多行注释部分
(2)优点和不足
- 优点:
- 可以任意的添加和修改第三张表中的字段
- 并且支持orm跨表查询
- 不足:
- 不支持内置了四个操作第三张表的方法:
add, remove, set, clear
- 不支持内置了四个操作第三张表的方法:
2|0二、forms组件
- forms组件是django自带的一个组件,用来校验前端form表单中用户提交的数据是否符合我们指定的格式。
2|11. forms组件的3大作用
-
渲染标签:通过forms组件语法,创建
input
标签 -
校验数据:将数据转递给后端做数据校验。(当使用forms组件时,前端浏览器会自动识别,并在前端会自动做一次校验。但是前端的校验基本没有意义,一般关闭前端校验。方法是:在form表单中加一个
novalidate
参数即可) -
展示信息:如果数据有错误,展示错误信息
2|22. 渲染标签
- 继承
forms.Form
的类,通过实例化出一个对象,传到前端后,在前端可以将其内定义的属性直接渲染成用户输入的标签。但是不会帮你生成一个提交按钮,因此需要你手动创建。
(1)前端渲染标签的3种方式
- 前端中渲染标签的方式推荐使用第三种
(2)后端写法
- 步骤
- 先导入forms组件
- 创建一个继承
forms.Form
的类 - 在功能函数中实例化一个空的forms类的对象
form_obj = MyForm()
- 判断前端的提交方式为POST时,再生成一个必须与空对象同名的的forms类的对象
form_obj = MyForm(request.POST)
- 给前端返回数据
- 后端实例
(3)forms基本使用实例:
2|33. 校验数据
-
数据的校验通常前后端都必须有,但是前端的校验可有可无,并且弱不禁。后端的校验必须要有,并且必须非常的全面
-
如何告诉浏览器不做校验 form表单中加一个
novalidate
参数即可 -
这里的校验数据是我们查看forms组件校验数据的原理。真正的校验数据其实在定义类时,各字段括号里的属性就是对其的校验条件。有了校验条件后,forms组件内部会自动帮我们校验。
-
forms组件的校验数据中有几个方法
forms对象 = MyForm({'username':'jason','password':'12','email':'123'})
:实例化forms对象。在实际开发中,括号里直接放request.POST
即可。forms对象.is_valid()
:查看校验的数据是否合法。只有当你的数据全部符合校验规则的情况下,结果才是True,否则都为Falseforms对象.errors
:查看错误信息,不加括号(错误信息包含不符合规则的字段及其错误的理由)(数据格式:{字段名:[错误信息]}
)forms对象.cleaned_data
:查看符合校验规则的数据,不加括号。(数据格式:{字段名:字段值}
)- 在实例化forms对象时,给类传的参数是个大字典,大字典内必须包含类中定义的那些属性字段。
2|44. 展示错误信息
- 即在渲染标签时,一起书写代码
3|0三、forms组件的校验条件和错误信息
- forms组件的对前端发送来的数据的进行校验的条件和向前端发送的中文的错误信息都是在定义forms类时书写的。
3|11. 校验条件和错误信息的书写
- 必须掌握的参数
- 实例
3|22. 其他校验数据的方式
(1)HOOK(钩子函数)
-
注意:钩子函数写在自定义的forms类中
-
当你觉得1中的校验条件还不能够满足你的需求,你可以考虑使用钩子函数
-
是一个函数,函数体内你可以写任意的校验代码
-
分为局部钩子和全局钩子
- 局部钩子:只能钩取单个字段进行校验
- 全局钩子:可同时钩取多个字段进行校验
1. 局部钩子
-
语法:
-
局部钩子实例
2. 全局钩子
-
语法加实例:
(2)选择类的input框
(3)其他约束条件
__EOF__

本文作者:BigSun丶
本文链接:https://www.cnblogs.com/Mcoming/p/11979088.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Mcoming/p/11979088.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!