前言:本文是学习网易微专业的《python全栈工程师》 中的《服务器运维开发工程师》专题的课程笔记,欢迎学习交流。同时感谢老师们的精彩传授!
一、课程目标
- 多级分类结构
- 自关联模型
- 多级菜单生成
二、详情解读
2.1.多级分类结构
2.2.自关联模型
表结构:
字段名 | 说明 |
---|---|
cate_id |
分类ID |
parent_id |
父级ID |
cate_name |
分类名称 |
表数据:
父级关系:
parent = db.relationship('Goodscategory', back_populates="sub_cates", remote_site=[id])
子级关系:
sub_cates = db.relationship('GoodsCategory', back_populates="parent", cascade='all, delete-orphpan', order_by=order_id)
外键约束性问题:
当使用mysql
的innodb
引擎的时候,由于外键约束完整性,会导致添加第一层级的类别
失败:没有id=0
的分类
解决办法:将第一级的分类的父类id
为null
就可以了
最后的数据表应该是如下的:
2.2.多级菜单生成
多级菜单 不能通过FlaskForm
来直接定义,而是生成树状数据,可以缓存,然后前端根据数据结构生成前端列表,由js
创建选择列表
function createSelect(data){
var category_select = $("#category_select")
var select = document.createElement("select")
select.options.add(new Option("请选择所属类别", 0))
for (option in data){
select.options.add(new Option(data[option][0], data[option][1]))
}
select.options[0].selected = true
select.className="form-control"
select.onchange=function(){
parent_id = this.options[this.selectedIndex].value
$(this).next().remove()
load_cate(parent_id)
}
category_select.append(select)
}
function load_cate(parent_id=0) {
$.ajax({
url: category_url + "?parent_id=" + parent_id,
method: "get",
success: function (data) {
if (data.length > 0) {
createSelect(data)
}
}
})
}
2.2.1.开发任务
设计一个多级地区管理模型:
实现后台的添加管理、在技术文档中增加地区模型字段说明,格式可以参考会员模型:
三、课程小结
- 01 多级菜单
- 02 多级菜单数据结构
- 03 多级菜单模型
- 04 前端动态菜单