18. 商品类别后端和前端接口实现【雪花服务】

发布时间 2023-04-26 16:06:52作者: 以赛亚
因为有类别分级所以用到了一个外键字段即:parentId, 为了保证字段唯一,且便于扩展【数据量大了分库分表等】使用了goole开源的雪花算法如下:
参考文档:https://www.jianshu.com/p/0e6ffa8693b5
安装pysnowflake : pip  install  pysnowflake
 
开始实现具体代码如下:
第一步首先需要启动雪花服务端: [在项目目录下启动即可/也可以在已经安装环境的任意目录下启动]
snowflake_start_server --worker=1
第二步写获取雪花唯一ID的客户端:
import snowflake.client

def get_unique_db_id_by_name():
    uniq_id = snowflake.client.get_guid()
    print("get unique id ==", uniq_id)
    return uniq_id


if __name__ == '__main__’:
    # 测试代码
    for _ in range(10):
        get_unique_db_id_by_name()

数据库设计如下:category_info
name: 分类名称
uniq_id:唯一ID
parent_id:上一级ID【父类ID,一级默认为“0”】 
create table category_info(name varchar(50), uniq_id varchar(20), parent_id varchar(20));

获取商品分类信息接口如下:

# 获取商品分类信息
@app.route('/admin/products/category', methods=["get"])
def get_category_info():
    category_id = request.args.get("parent_id")
    print("category id ==", category_id)
    category_res = get_category_by_parent_id(category_id)
    print("return weather res ==", category_res)
    res_data = {
        "code": 1,
        "data": category_res,
        "message": "获取成功"
    }
    if len(category_res) == 0:
        res_data['code'] = 0
        res_data['message'] = "数据为空"
    return jsonify(res_data)

添加商品分类接口:

# 添加分类
@app.route('/admin/products/category/add', methods=["post"])
def add_category_info():
    cate_data = request.get_data()
    post_data = json.loads(cate_data)
    # 需要 parent_id name
    print("add category post_data ==", post_data)  # {'category_name': '游戏', 'parent_id': '0'}
    category_res = add_category(post_data)
    print("return add res ==", category_res)
    res_data = {
        "code": 1,
        "message": "添加成功"
    }
    if category_res != 1:
        res_data['code'] = 0
        res_data['message'] = "添加失败"
    return jsonify(res_data)

更新商品分类接口:

# 更新分类
@app.route('/admin/products/category/update', methods=["post"])
def update_category_info():
    update_data = request.get_data()
    post_data = json.loads(update_data)
    # 需要 parent_id name
    print("update category post_data ==", post_data)
    category_res = update_category(post_data)
    print("return update res ==", category_res)
    res_data = {
        "code": 1,
        "message": "更新成功"
    }
    if not category_res:
        res_data['code'] = 0
        res_data['message'] = "更新失败"
    return jsonify(res_data)

通过postman工具测试接口是可以的,然后在前端把对应的ajax的接口写好,然后动态展示信息

// 获取商品分类一级/二级信息
export const reqCategories = (parent_id) => ajax('/admin/products/category', {parent_id})
// 添加分类
export const reqAddCategory = (category_name, parent_id) => ajax('/admin/products/category/add', {category_name, parent_id}, 'POST')
// 更新分类
export const reqUpdateCategory = ({category_name, uniq_id}) => ajax('/admin/products/category/update', {category_name, uniq_id}, 'POST')