加入购物车功能的实现
创建购物车数据库
use food_db
CREATE TABLE `member_cart` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`member_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '会员id',
`food_id` int(11) NOT NULL DEFAULT '0' COMMENT '商品id',
`quantity` int(11) NOT NULL DEFAULT '0' COMMENT '数量',
`updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新时间',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
PRIMARY KEY (`id`),
KEY `idx_member_id` (`member_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='购物车';
flask-sqlacodegen "mysql://root:123456@127.0.0.1/food_db" --tables member_cart --outfile "order/common/models/member/MemberCart.py" --flask
food/info.js添加处理:
addShopCar: function () {
var that = this;
var data = {
"id": this.data.info.id,
"number": this.data.buyNumber
};
wx.request({
url: app.buildUrl("/cart/set"),
header: app.getRequestHeader(),
method: 'POST',
data: data,
success: function (res) {
var resp = res.data;
app.alert({"content": resp.msg});
that.setData({
hideShopPopup: true
});
}
});
},
创建一个Cart.py文件
# -*- coding: utf-8 -*-
from web.controllers.api import route_api
from flask import request,jsonify,g
from common.models.food.Food import Food
from common.models.member.MemberCart import MemberCart
from common.libs.Helper import selectFilterObj,getDictFilterField
from common.libs.UrlManager import UrlManager
from application import app,db
import json
@route_api.route("/cart/set", methods=["POST"])
def setCart():
resp = {'code': 200, 'msg': '添加购物车成功~', 'data': {}}
return jsonify(resp)
web/api/__ init __.py引入Cart
from flask import Blueprint
route_api = Blueprint( 'api_page',__name__ )
from web.controllers.api.Member import *
from web.controllers.api.Food import *
from web.controllers.api.Cart import *
此时 运行提示添加购物车成功
setCart接口实现
@route_api.route("/cart/set", methods=["POST"])
def setCart():
resp = {'code': 200, 'msg': '添加购物车成功~', 'data': {}}
req = request.values
food_id = int(req['id']) if 'id' in req else 0
number = int(req['number']) if 'number' in req else 0
if food_id < 1 or number < 1:
resp['code'] = -1
resp['msg'] = "添加购物车失败-1~~"
return jsonify(resp)
member_info = g.member_info
if not member_info:
resp['code'] = -1
resp['msg'] = "添加购物车失败-2~~"
return jsonify(resp)
food_info = Food.query.filter_by(id=food_id).first()
if not food_info:
resp['code'] = -1
resp['msg'] = "添加购物车失败-3~~"
return jsonify(resp)
if food_info.stock < number:
resp['code'] = -1
resp['msg'] = "添加购物车失败,库存不足~~"
return jsonify(resp)
ret = CartService.setItems(member_id=member_info.id, food_id=food_info.id, number=number)
if not ret:
resp['code'] = -1
resp['msg'] = "添加购物车失败-4~~"
return jsonify(resp)
return jsonify(resp)
CartService
服务添加
# -*- coding: utf-8 -*-
import hashlib,requests,random,string,json
from application import app,db
from common.models.member.MemberCart import MemberCart
from common.libs.Helper import getCurrentDate
class CartService():
@staticmethod
def setItems( member_id = 0,food_id = 0,number = 0 ):
if member_id < 1 or food_id < 1 or number < 1:
return False
cart_info = MemberCart.query.filter_by( food_id = food_id, member_id= member_id ).first()
if cart_info:
model_cart = cart_info
else:
model_cart = MemberCart()
model_cart.member_id = member_id
model_cart.created_time = getCurrentDate()
model_cart.food_id = food_id
model_cart.quantity = number
model_cart.updated_time = getCurrentDate()
db.session.add(model_cart)
db.session.commit()
return True
运行 发现已经可以成功写入数据库了
角标数量修改
web/controllers/api/Food.py添加member_info 对应的cart_number的读取
from flask import request,jsonify,g
from common.models.member.MemberCart import MemberCart
@route_api.route("/food/info" )
def foodInfo():
resp = {'code': 200, 'msg': '操作成功~', 'data': {}}
req = request.values
id = int(req['id']) if 'id' in req else 0
food_info = Food.query.filter_by( id = id ).first()
if not food_info or not food_info.status :
resp['code'] = -1
resp['msg'] = "美食已下架"
return jsonify(resp)
member_info = g.member_info
cart_number = 0
if member_info:
cart_number = MemberCart.query.filter_by(member_id=member_info.id).count()
resp['data']['info'] = {
"id":food_info.id,
"name":food_info.name,
"summary":food_info.summary,
"total_count":food_info.total_count,
"comment_count":food_info.comment_count,
'main_image':UrlManager.buildImageUrl( food_info.main_image ),
"price":str( food_info.price ),
"stock":food_info.stock,
"pics":[ UrlManager.buildImageUrl( food_info.main_image ) ]
}
resp['data']['cart_number'] = cart_number
return jsonify(resp)
info.js添加getinfo设置shopCarNum:
that.setData({
info: resp.data.info,
buyNumMax: resp.data.info.stock,
shopCarNum:resp.data.cart_number
});
这里就显示1了