zoukankan      html  css  js  c++  java
  • 智能玩具 扫码 绑定玩具 玩具列表

    扫码   绑定玩具   玩具列表  

    扫码结果分三种情况

    绑定玩具   给玩具/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)
  • 相关阅读:
    Codeforces 570E
    Codeforces 570D
    Codeforces 1136E
    Codeforces 570
    小白学习sprint boot容易遇到了一些问题
    力扣 234. 回文链表
    力扣198. 打家劫舍
    力扣543. 二叉树的直径
    力扣141.环形链表
    剑指offer1.跳台阶 & 力扣70.爬楼梯
  • 原文地址:https://www.cnblogs.com/XLHIT/p/11253321.html
Copyright © 2011-2022 走看看