菜品分類顯示
我們需要先實現分類操作,因為沒有菜品分類,我們無法準確知道當前菜品屬于哪個分類,在前端顯示時,需要根據分類顯示數據
先顯示分類列表頁面
準備路由
@manage_bp.route('/food/cat/list')
def food_cat_list():# 默認頁面從1開始page = int(request.args.get('page', 1))query = FoodCat.query
?status_name = int(request.args.get('status', '-1'))# 如果有狀態值就取反之默認-1if status_name > -1:query = query.filter(FoodCat.status == status_name)# -號降序排序 先按權重降序,權重相同時按ID降序page_data = query.order_by(-FoodCat.weight, -FoodCat.id).paginate(page=page, per_page=Config.PER_PAGE)
?resp_data = {'list': page_data,'status_mapping': constants.STATUS_MAPPING,'current': 'cat'}
?return ops_render('food/cat.html', resp_data)
分類添加和編輯
和上面的用戶添加和編輯操作一樣,我們可以在同一個路由中,完成添加和編輯的操作
用戶點擊編輯按鈕的時候,使用get方式傳遞一個id值。如果使用的是get方式則為編輯頁,需要先獲取當前id的分類數據,傳遞到cat_set.html頁面中,進行渲染。
@manage_bp.route('/food/cat/edit', methods=['GET', 'POST'])
def food_cat_edit():if request.method == 'GET':resp_data = {}req = request.argsc_id = int(req.get('id', 0))info = Noneif c_id:info = FoodCat.query.get(c_id)resp_data['info'] = inforesp_data['current'] = 'cat'
?return ops_render('food/cat_set.html', resp_data)
編輯和添加的操作內容大致相同,不過我們需要判定是否有id傳遞,如果有則獲取當前id的數據對象,進行添加的操作(此時的添加其實是修改)。如果沒有則獲取一個空的數據對象,進行真正的添加操作
? ?if request.method == 'POST':resp = {'code': 200, 'msg': '操作成功!', 'data': {}}req = request.values# 是否有id傳遞c_id = req['id'] if 'id' in req else 0# 有值則拿值,沒有為空name = req['name'] if 'name' in req else ''# 權重默認值為1weight = int(req['weight']) if ('weight' in req and int(req['weight']) > 0) else 1# 為空不能添加if not name or len(name) < 1:resp['code'] = -1resp['msg'] = '類別名稱不能為空!'return jsonify(resp)
?info = FoodCat.query.get(c_id)if not info:info = FoodCat()
?info.name = nameinfo.weight = weightdb.session.add(info)db.session.commit()return jsonify(resp)
刪除分類(修改狀態)
因為在真實操作用,不需要刪除的操作,我們可以將當前分類的狀態修改為無效即可,具體狀態碼,可以查看食物類別的模型類中的comment備注
@manage_bp.route('/food/cat/ops', methods=['PUT'])
def foot_cat_ops():resp = {'code': 200, 'msg': '操作成功!', 'data': {}}req = request.values# 同一個元素,根據傳遞的參數不同,執行刪除或者恢復的操作# 這里就需要前端傳參的時候進行配合,和用戶的禁用其實是一個道理c_id = req['id'] if 'id' in req else 0act = req['act'] if 'act' in req else ''if not c_id:resp['code'] = -1resp['msg'] = '操作失敗!'return jsonify(resp)if act not in ['remove', 'recover']:resp['code'] = -1resp['msg'] = '操作失敗!'return jsonify(resp)cat_obj = FoodCat.query.get(c_id)if not cat_obj:resp['code'] = -1resp['msg'] = '指定類別不存在!'return jsonify(resp)if act == 'remove':cat_obj.status = 0elif act == 'recover':cat_obj.status = 1db.session.commit()return jsonify(resp)