def delete(self, *args, **kwargs):
        """admin only"""
        result = {
            "errno": 0,
            "reason": ""
        }

        if not self.current_user.admin:
            return self.send_error(status_code=404)

        key = self.get_argument("key", default="")

        if not key:
            result["errno"] = 1
            result["reason"] = "missing argument"
        else:
            user = get_user_by_key(self.session, key)

            if not user:
                result["errno"] = 1
                result["reason"] = "no matching key"
            else:
                user.active = False
                self.session.commit()

        self.write(json.dumps(result))
    def get(self, *args, **kwargs):
        """admin only"""
        result = {
            "errno": 0,
            "reason": "",
            "user_info": []
        }

        if not self.current_user.admin:
            return self.send_error(status_code=404)

        key = self.get_argument("key", default="")

        if not key:
            users = get_all_user(self.session)
            for user in users:
                result["user_info"].append(dict(
                    id=user.id,
                    email=user.email,
                    name=user.username,
                    dept=user.dept,
                    type=user.type,
                    manager=user.manager,
                    blacklist=user.blacklist,
                    key=user.key,
                    city=user.city,
                    building=user.building,
                    seat=user.seat
                ))
        else:
            user = get_user_by_key(self.session, key)
            if not user:
                result["errno"] = 1
                result["reason"] = "invalid key"
            else:
                result["user_info"] = [dict(
                    id=user.id,
                    email=user.email,
                    name=user.username,
                    dept=user.dept,
                    type=user.type,
                    manager=user.manager,
                    blacklist=user.blacklist,
                    key=user.key,
                    city=user.city,
                    building=user.building,
                    seat=user.seat
                )]
        return self.write(json.dumps(result))
    def post(self, *args, **kwargs):
        """admin only"""
        result = {
            "errno": 0,
            "reason": ""
        }
        try:
            key = self.get_argument("key")
            user = get_user_by_key(self.session, key)
            if not user:
                result["errno"] = 1
                result["reason"] = u"非法key"
            elif not user.admin:
                result["errno"] = 1
                result["reason"] = u"用户不是管理员"
            else:
                phone_id = self.get_argument("phoneId")
                identifier = self.get_argument("identifier")
                product = self.get_argument("product", default="")
                mode = self.get_argument("mode", default="")
                dpi = self.get_argument("dpi", default="")
                osv = self.get_argument("osv", default="")
                osvalias = self.get_argument("osvalias", default="")
                belongs = self.get_argument("belongs", default="")

                phone = get_phone_by_phone_id(self.session, phone_id)

                if phone:
                    result["errno"] = 1
                    result["reason"] = u"phoneId已存在"
                else:
                    new_phone = register_phone(self.session, phone_id, identifier,
                                               product, mode, dpi, osv, osvalias, belongs)
                    if new_phone:
                        set_borrower(self.session, new_phone, user)
                    else:
                        result["errno"] = 1
                        result["reason"] = u"注册设备失败"
        except tornado.web.MissingArgumentError:
            result["errno"] = 1
            result["reason"] = u"缺少字段"

        return self.write(json.dumps(result))
    def post(self, *args, **kwargs):
        result = {
            "errno": 0,
            "reason": ""
        }

        try:
            key = self.get_argument("key")
            phone_id = self.get_argument("phoneId")
            user = get_user_by_key(self.session, key)
            phone = get_phone_by_phone_id(self.session, phone_id)

            if not user:
                result["errno"] = 1
                result["reason"] = u"非法key"
            elif not phone:
                result["errno"] = 1
                result["reason"] = u"非法phoneId"
            elif user.blacklist is True:
                result["errno"] = 1
                result["reason"] = u"该用户在黑名单"
            elif user.active is False:
                result["errno"] = 1
                result["reason"] = u"该用户不可操作"
            elif phone.active is False:
                result["errno"] = 1
                result["reason"] = u"该设备不可用"
            else:
                if set_borrower(self.session, phone, user):
                    pass
                else:
                    result["errno"] = 1
                    result["reason"] = u"设置失败"
        except tornado.web.MissingArgumentError:
            result["errno"] = 1
            result["reason"] = u"缺少参数"
            return self.write(json.dumps(result))

        return self.write(json.dumps(result))