扫码 绑定玩具 玩具列表
扫码结果分三种情况
绑定玩具 给玩具/APP 添加 朋友列表 friend_list
玩具列表展示
开机 玩具 已绑定 未绑定 未授权
跨域请求 CORS
from bson import ObjectId from flask import Blueprint, request, jsonify from settings import MDB, RET devices_bp = Blueprint("devices_bp", __name__) # 扫码 # @devices_bp.route("/scan_qr", methods=["POST"]) # def scan_qr(): # # 扫码绑定 # # 1.扫描成功,没有绑定 开启绑定 # # 2.扫码失败,未授权 # # 3.扫码成功,已经绑定 ?添加好友 # # app扫描二维码后获取到的device_key # device_key = request.form.to_dict() # # 数据库中查找是否有该二维码信息 # device = MDB.Device.find_one(device_key) # # # 1.二维码扫描成功并且设备未进行绑定 # if device: # RET["CODE"] = 0 # RET["MSG"] = "二维码扫描成功" # RET["DATA"] = device_key # # # 2.二维码扫描失败,扫描的条码不是设备库中存在的 # else: # RET["CODE"] = 1 # RET["MSG"] = "请扫描玩具二维码" # RET["DATA"] = {} # # # 3.二维码扫描成功, 但设备已经进行绑定 # # { # # "code": 2, # # "msg": "设备已经进行绑定", # # "data": # # { # # "toy_id": toy_id # # } # # } # # return jsonify(RET) @devices_bp.route("/scan_qr", methods=["POST"]) def scan_qr(): # 扫码绑定 # 1.扫描成功,没有绑定 开启绑定 # 2.扫码失败,未授权 # 3.扫码成功,已经绑定 ?添加好友 device_key = request.form.to_dict() toy_info = MDB.Toys.find_one(device_key) if not toy_info: # 数据库查看是否有该二维码 device = MDB.Device.find_one(device_key) # 1.二维码扫描成功并且设备未进行绑定 if device: RET["CODE"] = 0 RET["MSG"] = "二维码扫描成功" RET["DATA"] = device_key # 2.二维码扫描失败,扫描的条码不是设备库中存在的 else: RET["CODE"] = 1 RET["MSG"] = "请扫描玩具二维码" RET["DATA"] = {} # 3.二维码扫描成功, 但设备已经进行绑定,可以添加好友 else: RET["CODE"] = 2 RET["MSG"] = "设备已经进行绑定" RET["DATA"] = {"toy_id": str(toy_info.get("_id"))} return jsonify(RET) @devices_bp.route("/bind_toy", methods=["POST"]) def bind_toy(): # 获取玩具信息 toy_info = request.form.to_dict() # print(toy_info) # {'toy_name': '斑点狗', 'baby_name': '小宝', 'remark': '老爸', 'device_key': '0a4e2ea40d077537e199823fe3dda26f', # 'user_id': '5d350c6718518ec92363e3a8'} # 查询user_info 数据 user_id = toy_info.pop("user_id") user_info = MDB.Users.find_one({"_id": ObjectId(user_id)}) # user_info: {'_id': ObjectId('5d350c6718518ec92363e3a8'), 'username': 'aaa', # 'password': '698d51a19d8a121ce581499d7b701668', 'nickname': 'aaa1', 'gender': '1', 'avatar': 'mama.jpg', # 'bind_toys': [], 'friend_list': []} # 创建Chats表 参考它的数据结构 chat_id = MDB.Chats.insert_one({"user_list": [], "chat_list": []}) # 为toy 添加所需数据 创建toy toy_info["avatar"] = "toy.jpg" toy_info["bind_user"] = user_id toy_info["friend_list"] = [] # 给toy 增加第一个 app toy_add_user = { # 与Users 数据friend_list结构相同 "friend_id": str(user_id), # 昵称 "friend_nick": user_info.get("nickname"), # remark toy 表不需要remark pop出来 "friend_remark": toy_info.pop("remark"), "friend_avatar": user_info.get("avatar"), "friend_chat": str(chat_id.inserted_id), "friend_type": "app" } # print("toy_add_user", toy_add_user) toy_info["friend_list"].append(toy_add_user) toy_id = MDB.Toys.insert_one(toy_info) # toy_add_user # {'friend_id': '5d350c6718518ec92363e3a8', 'friend_nick': 'aaa1', 'friend_remark': '老妈', 'friend_avatar': 'mama.jpg', # 'friend_type': 'app'} # app也要增加toy对象 user_add_toy = { "friend_id": str(toy_id.inserted_id), "friend_nick": toy_info.get("baby_name"), "friend_remark": toy_info.get("toy_name"), "friend_avatar": "toy.jpg", # 好友头像 "friend_chat": str(chat_id.inserted_id), # 聊天数据表对应值 "friend_type": "toy" } user_info["bind_toys"].append(str(toy_id.inserted_id)) user_info["friend_list"].append(user_add_toy) # 修改Users 全部数据 MDB.Users.update_one({"_id": ObjectId(user_id)}, {"$set": user_info}) # Chats数据修改 MDB.Chats.update_one({"_id": chat_id.inserted_id}, {"$set": {"user_list": [user_id, str(toy_id.inserted_id)]}}) # 响应信息 RET["CODE"] = 0 RET["MSG"] = "绑定完成" RET["DATA"] = {} return jsonify(RET) @devices_bp.route("/toy_list", methods=["POST"]) def toy_list(): bind_user = request.form.get("_id") # 玩具列表 toyl = list(MDB.Toys.find({"bind_user": bind_user})) for toy in toyl: toy["_id"] = str(toy.get("_id")) RET["CODE"] = 0 RET["MSG"] = "获取Toy列表" RET["DATA"] = toyl return jsonify(RET) @devices_bp.route("/open_toy", methods=["POST"]) def open_toy(): # 获取唯一验证二维码信息 device_key = request.form.to_dict() # 1.用 device_key 查询? Devices or Toys # 先查询已绑定Toy 可以有效减少数据库查询次数(减少IO操作) toy = MDB.Toys.find_one(device_key) # 设备绑定状态 # 1.设备处于绑定状态, 正常启动 if toy: ret = { "code": 0, "music": "Success.mp3", "toy_id": str(toy.get("_id")), "name": toy.get("toy_name"), } else: # 2.设备未绑定 if MDB.Device.find_one(device_key): ret = { "code": 1, "music": "Nobind.mp3" } # 3.设备未授权 else: ret = { "code": 1, "music": "Nolic.mp3" } return jsonify(ret)