菜品分类显示
我们需要先实现分类操作,因为没有菜品分类,我们无法准确知道当前菜品属于哪个分类,在前端显示时,需要根据分类显示数据
先显示分类列表页面
准备路由
@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)