18. 商品类别后端和前端接口实现【雪花服务】
因为有类别分级所以用到了一个外键字段即:parentId, 为了保证字段唯一,且便于扩展【数据量大了分库分表等】使用了goole开源的雪花算法如下:
安装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')