前言:本文是學習網易微專業的《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 前端動態菜單