Esempio n. 1
0
    def delete(self, request, *args, **kwargs):
        serializer = FaceGroupIDSerialzier(data=request.data)

        if not serializer.is_valid():
            retdata = BaseResponse(code=0, msg='error')
            if serializer.errors.get('face_group_id'):
                if serializer.errors['face_group_id'][0].code == 'required':
                    retdata.error_msg = '人脸库ID是必须的'
                else:
                    retdata.error_msg = '人脸库ID不合法,为6-20位字母、数字或下划线'
            return Response(retdata.result)

        face_group = FaceGroup.objects.filter(
            user=request.user,
            face_group_id=serializer.validated_data['face_group_id']).first()
        if not face_group:
            retdata = BaseResponse(code=0, msg='error', error_msg='不存在该人脸库')
            return Response(retdata.result)

        if face_group.bound:
            retdata = BaseResponse(code=0,
                                   msg='error',
                                   error_msg='人脸库已绑定摄像头,请先解除绑定后删除')
            return Response(retdata.result)

        face_group.delete()
        retdata = BaseResponse(code=1, msg='success', success_msg='删除人脸库成功')
        return Response(retdata.result)
Esempio n. 2
0
    def delete(self, request, *args, **kwargs):
        serializer = FaceIDSerializer(data=request.data)
        if not serializer.is_valid():
            retdata = BaseResponse(code=0, msg='error')
            if serializer.errors.get('face_id'):
                if serializer.errors['face_id'][0].code == 'required':
                    retdata.error_msg = '人脸ID是必须的'
                else:
                    retdata.error_msg = '人脸ID不合法,为6-20位字母、数字或下划线'
            return Response(retdata.result)

        face = Face.objects.filter(
            user=request.user,
            face_id=serializer.validated_data['face_id']).first()
        if not face:
            retdata = BaseResponse(code=0, msg='error', error_msg='不存在人脸')
            return Response(retdata.result)

        if face.group.bound:
            retdata = BaseResponse(code=0,
                                   msg='error',
                                   error_msg='人脸所属组绑定了技能,不能删除')
            return Response(retdata.result)

        face.face_image.delete()
        face.delete()
        retdata = BaseResponse(code=1, msg='success', success_msg='人脸信息删除成功')
        return Response(retdata.result)
Esempio n. 3
0
    def get(self, requests, *args, **kwargs):
        serializer = CameraPreviewSerializer(data=requests.query_params)
        if not serializer.is_valid():
            retdata = BaseResponse(code=0, msg='error')
            if serializer.errors.get('camera_id'):
                if serializer.errors['camera_id'][0].code == 'required':
                    retdata.error_msg = '摄像图ID是必须的'
                else:
                    retdata.error_msg = '摄像头ID不合法,为6-20位字母、数字或下划线'
            return Response(retdata.result)

        camera = Camera.objects.filter(
            user=requests.user,
            camera_id=serializer.validated_data['camera_id']).first()
        if not camera:
            retdata = BaseResponse(code=0, msg='error', error_msg='不存在该摄像头')
            return Response(retdata.result)

        preview = get_preview(camera.camera_url)
        if not preview:
            if not is_opened(camera.camera_url):
                camera.state = 10
                camera.save()

            retdata = BaseResponse(code=0,
                                   msg='error',
                                   error_msg='摄像头连接或抽帧发生错误',
                                   data=RetrieveCameraSerializer(camera).data)
            return Response(retdata.result)

        retdata = BaseResponse(code=1,
                               msg='success',
                               success_msg='摄像头预览图片请求成功',
                               data=preview)
        return Response(retdata.result)
Esempio n. 4
0
    def get(self, request, *args, **kwargs):
        serializer = InterfaceGroupIDSerializer(data=request.query_params)
        if not serializer.is_valid():
            retdata = BaseResponse(code=0, msg='error')
            if serializer.errors.get('ai_skill_group_id'):
                if serializer.errors['ai_skill_group_id'][
                        0].code == 'required':
                    retdata.error_msg = '技能接口分组ID是必须的'
                else:
                    retdata.error_msg = '技能接口分组ID不合法,为6-20位字母、数字或下划线'
            return Response(retdata.result)

        has_ai_skill_gourp = AISkillGroup.objects.filter(
            user=request.user,
            ai_skill_group_id=serializer.validated_data['ai_skill_group_id']
        ).first()
        retdata = BaseResponse(code=1, msg='success')
        if not has_ai_skill_gourp:
            retdata.success_msg = '技能接口分组不存在,可创建'
            retdata.data = 0
        else:
            retdata.success_msg = '技能接口分组已存在'
            retdata.data = 1

        return Response(retdata.result)
Esempio n. 5
0
    def delete(self, request, *args, **kwargs):
        serializer = InterfaceIDSerializer(data=request.data)
        if not serializer.is_valid():
            retdata = BaseResponse(code=0, msg='error')
            if serializer.errors.get('ai_skill_id'):
                if serializer.errors['ai_skill_id'][0].code == 'required':
                    retdata.error_msg = '技能接口ID是必须的'
                else:
                    retdata.error_msg = '技能接口ID不合法,为6-20位字母、数字或下划线'
            return Response(retdata.result)

        ai_skill = AISkill.objects.filter(
            user=request.user,
            ai_skill_id=serializer.validated_data['ai_skill_id']).first()
        if not ai_skill:
            retdata = BaseResponse(code=0, msg='error', error_msg='AI技能接口不存在')
            return Response(retdata.result)

        if ai_skill.bound:
            retdata = BaseResponse(code=0,
                                   msg='error',
                                   error_msg='技能被摄像头绑定,请解绑后删除')
            return Response(retdata.result)

        ai_skill.delete()
        retdata = BaseResponse(code=1, msg='success', success_msg='AI技能接口删除成功')
        return Response(retdata.result)
Esempio n. 6
0
    def delete(self, request, *args, **kwargs):
        serializer = InterfaceGroupIDSerializer(data=request.data)
        if not serializer.is_valid():
            retdata = BaseResponse(code=0, msg='error')
            if serializer.errors.get('ai_skill_group_id'):
                if serializer.errors['ai_skill_group_id'][
                        0].code == 'required':
                    retdata.error_msg = '技能分组ID是必须的'
                else:
                    retdata.error_msg = '技能分组ID不合法,为6-20位字母、数字或下划线'
            return Response(retdata.result)

        ai_skill_group = AISkillGroup.objects.filter(
            user=request.user,
            ai_skill_group_id=serializer.validated_data['ai_skill_group_id']
        ).first()
        if not ai_skill_group:
            retdata = BaseResponse(code=0, msg='error', error_msg='不存在的接口库')
            return Response(retdata.result)

        ai_skills = ai_skill_group.aiskill_set.all()
        if ai_skills:
            for ai_skill in ai_skills:
                if ai_skill.bound:
                    retdata = BaseResponse(code=0,
                                           msg='error',
                                           error_msg='该技能接口库中存在绑定摄像头的接口,无法删除')
                    return Response(retdata.result)

        ai_skill_group.delete()
        retdata = BaseResponse(code=1, msg='success', success_msg='接口库删除成功')
        return Response(retdata.result)
Esempio n. 7
0
    def post(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)

        if serializer.is_valid():
            retdata = BaseResponse(
                code=1,
                msg='success',
                data=serializer.validated_data,
                success_msg='登录成功'
            )
            return Response(retdata.result)

        retdata = BaseResponse(
            code=0,
            msg='error'
        )
        non_field_errors = serializer.errors.get('non_field_errors')
        if non_field_errors:
            retdata.error_msg = non_field_errors[0]
            return Response(retdata.result)
        elif serializer.errors.get('username'):
            retdata.error_msg = '用户名不合法,为6到16位字母、数字或下划线'
        elif serializer.errors.get('email'):
            retdata.error_msg = '邮箱格式错误或不支持的邮箱'
        elif serializer.errors.get('password'):
            if serializer.errors['password'][0].code == 'required':
                retdata.error_msg = '账号或密码是必传的'
            else:
                retdata.error_msg = '密码不合法,为6到16位字母、数字或合法符号'
        return Response(retdata.result)
Esempio n. 8
0
    def get(self, request, *args, **kwargs):
        serializer = RetrieveCameraCheckSerializer(data=request.query_params)

        if not serializer.is_valid():
            retdata = BaseResponse(code=0, msg='error')
            if serializer.errors.get('camera_group_id'):
                if serializer.errors['camera_group_id'][0].code == 'required':
                    retdata.error_msg = '摄像头分组ID是必须的'
                else:
                    retdata.error_msg = '摄像头分组ID不合法,为6-20位字母、数字或下划线'
            return Response(retdata.result)

        has_camera_group = CameraGroup.objects.filter(
            camera_group_id=serializer.validated_data['camera_group_id']
        ).first()
        if not has_camera_group:
            retdata = BaseResponse(code=0, msg='error', error_msg='没有该摄像头分组')
            return Response(retdata.result)

        cameras = Camera.objects.filter(group__camera_group_id=serializer.
                                        validated_data['camera_group_id'])
        cameras_serializer = RetrieveCameraSerializer(instance=cameras,
                                                      many=True)

        retdata = BaseResponse(code=1,
                               msg='success',
                               success_msg='数据请求成功',
                               data=cameras_serializer.data)
        return Response(retdata.result)
Esempio n. 9
0
    def get(self, request, *args, **kwargs):
        serializer = HasCameraGroupSerializer(data=request.query_params)

        if not serializer.is_valid():
            retdata = BaseResponse(code=0, msg='error')
            if serializer.errors.get('camera_group_id'):
                if serializer.errors['camera_group_id'][0].code == 'required':
                    retdata.error_msg = '摄像头分组ID是必须的'
                else:
                    retdata.error_msg = '摄像头分组ID不合法,为6-20位字母、数字或下划线'
            return Response(retdata.result)

        camera_group_id = serializer.validated_data.get('camera_group_id')
        has_camera_group = CameraGroup.objects.filter(
            user=request.user, camera_group_id=camera_group_id).first()

        if has_camera_group:
            retdata = BaseResponse(code=1,
                                   msg='success',
                                   data=1,
                                   success_msg='组ID已存在')
            return Response(retdata.result)

        retdata = BaseResponse(code=1,
                               msg='success',
                               data=0,
                               success_msg='组ID不存在,可新建')
        return Response(retdata.result)
Esempio n. 10
0
    def get(self, request, *args, **kwargs):
        serializer = FaceGroupIDSerialzier(data=request.query_params)
        if not serializer.is_valid():
            retdata = BaseResponse(code=0, msg='error')
            if serializer.errors.get('face_group_id'):
                if serializer.errors['face_group_id'][0].code == 'required':
                    retdata.error_msg = '人脸库ID是必须的'
                else:
                    retdata.error_msg = '人脸库ID不合法,为6-20位字母、数字或下划线'
            return Response(retdata.result)

        has_face_group = FaceGroup.objects.filter(
            user=request.user,
            face_group_id=serializer.validated_data['face_group_id']).first()

        if has_face_group:
            retdata = BaseResponse(code=1,
                                   msg='success',
                                   data=1,
                                   success_msg='人脸库已存在')
            return Response(retdata.result)
        else:
            retdata = BaseResponse(code=1,
                                   msg='success',
                                   data=0,
                                   success_msg='人脸库不存在,可创建')
            return Response(retdata.result)
Esempio n. 11
0
    def get(self, request, *args, **kwargs):
        serializer = InterfaceGroupIDSerializer(data=request.query_params)
        if not serializer.is_valid():
            retdata = BaseResponse(code=0, msg='error')
            if serializer.errors.get('ai_skill_group_id'):
                if serializer.errors['ai_skill_group_id'][
                        0].code == 'required':
                    retdata.error_msg = '技能接口分组是必须的'
                else:
                    retdata.error_msg = '技能接口分组ID不合法,为6-20位字母、数字或下划线'
            return Response(retdata.result)

        ai_skill_group = AISkillGroup.objects.filter(
            user=request.user,
            ai_skill_group_id=serializer.validated_data['ai_skill_group_id']
        ).first()
        if not ai_skill_group:
            retdata = BaseResponse(code=0, msg='error', error_msg='不存在的接口库')
            return Response(retdata.result)

        ai_skills = ai_skill_group.aiskill_set.all()
        ai_skills_serializer = InterfaceSerializer(ai_skills, many=True)
        retdata = BaseResponse(code=1,
                               msg='success',
                               success_msg='AI技能接口请求成功',
                               data=ai_skills_serializer.data)
        return Response(retdata.result)
Esempio n. 12
0
 def get(self, request, *args, **kwargs):
     retdata = BaseResponse(
         code=1,
         msg='success',
         success_msg='Token未过期'
     )
     return Response(retdata.result)
Esempio n. 13
0
    def patch(self, request, *args, **kargs):
        serializer = InterfaceIDSerializer(data=request.data)

        if not serializer.is_valid():
            retdata = BaseResponse(code=0, msg='error')
            if serializer.errors.get('ai_skill_id'):
                if serializer.errors['ai_skill_id'][0].code == 'required':
                    retdata.error_msg = '技能接口ID是必须的'
                else:
                    retdata.error_msg = '技能接口ID不合法,为6-20位字母、数字或下划线'
            return Response(retdata.result)

        ai_skill = AISkill.objects.filter(
            user=request.user,
            ai_skill_id=serializer.validated_data.get('ai_skill_id')).first()

        try:
            ai_skill_test = requests.get(ai_skill.ai_skill_url,
                                         timeout=10).status_code
            if ai_skill_test != 200:
                ai_skill.state = 0
                ai_skill.save()
                retdata = BaseResponse(code=1,
                                       msg='success',
                                       success_msg='接口异常',
                                       data=0)
                return Response(retdata.result)
            else:
                ai_skill.state = 1
                ai_skill.save()
                retdata = BaseResponse(code=1,
                                       msg='success',
                                       success_msg='接口正常',
                                       data=1)
                return Response(retdata.result)

        except (requests.exceptions.ConnectionError,
                requests.exceptions.ConnectTimeout):
            ai_skill.state = 0
            ai_skill.save()
            retdata = BaseResponse(code=1,
                                   msg='success',
                                   success_msg='接口异常',
                                   data=0)
            return Response(retdata.result)
Esempio n. 14
0
    def get(self, request, *args, **kwargs):
        ai_skill_groups = AISkillGroup.objects.filter(user=request.user)
        serializer = InterfaceGroupSerializer(ai_skill_groups, many=True)

        retdata = BaseResponse(code=1,
                               msg='success',
                               success_msg='接口库数据请求成功',
                               data=serializer.data)
        return Response(retdata.result)
Esempio n. 15
0
    def get(self, request, *args, **kwargs):
        face_groups = FaceGroup.objects.filter(user=request.user)
        serializer = FaceGroupSerializer(face_groups, many=True)

        retdata = BaseResponse(code=1,
                               msg='success',
                               success_msg='人脸库数据请求成功',
                               data=serializer.data)
        return Response(retdata.result)
Esempio n. 16
0
    def get(self, request, *args, **kwargs):
        camer_groups = CameraGroup.objects.filter(user=request.user)

        data = RetrieveCameraGroupSerializer(camer_groups, many=True)

        retdata = BaseResponse(code=1,
                               msg='success',
                               success_msg='摄像头组数据请求成功',
                               data=data.data)

        return Response(retdata.result)
Esempio n. 17
0
    def post(self, request, *args, **kwargs):
        serializer = StopSerializer(data=request.data)
        if not serializer.is_valid():
            retdata = BaseResponse(code=0, msg='error')
            if serializer.errors.get('camera_id'):
                if serializer.errors['camera_id'][0].code == 'required':
                    retdata.error_msg = '摄像头ID是必须的'
                else:
                    retdata.error_msg = '摄像头ID不合法,为6-20位字母、数字或下划线'
            return Response(retdata.result)

        camera_obj = Camera.objects.filter(
            user=request.user,
            camera_id=serializer.validated_data['camera_id']).first()
        if not camera_obj:
            retdata = BaseResponse(code=0, msg='error', error_msg='不存在该摄像头')
            return Response(retdata.result)

        task_id = request.user.username + '##' + serializer.validated_data[
            'camera_id']
        periodic_task = PeriodicTask.objects.filter(name=task_id).first()

        if not periodic_task:
            retdata = BaseResponse(code=0, msg='error', error_msg='摄像头没有运行任务')
            return Response(retdata.result)

        periodic_task.enabled = False
        periodic_task.save()
        periodic_task.delete()

        with RedisTaskState(task_id=task_id) as task_state:
            task_state.set_state('stopped')

        camera_obj.state = 22
        camera_obj.save()

        retdata = BaseResponse(code=1,
                               msg='success',
                               data=RetrieveCameraSerializer(camera_obj).data,
                               success_msg='任务已结束')
        return Response(retdata.result)
Esempio n. 18
0
    def get(self, request, *args, **kwargs):
        serializer = FaceIDSerializer(data=request.query_params)
        if not serializer.is_valid():
            retdata = BaseResponse(code=0, msg='error')
            if serializer.errors.get('face_id'):
                if serializer.errors['face_id'][0].code == 'required':
                    retdata.error_msg = '人脸ID是必须的'
                else:
                    retdata.error_msg = '人脸ID不合法,为6-20位字母、数字或下划线'
            return Response(retdata.result)

        has_face = Face.objects.filter(
            user=request.user, face_id=serializer.validated_data['face_id'])
        retdata = BaseResponse(code=1, msg='successs')
        if not has_face:
            retdata.success_msg = '人脸不存在,可创建'
            retdata.data = 0
        else:
            retdata.success_msg = '人脸已存在'
            retdata.data = 1

        return Response(retdata.result)
Esempio n. 19
0
    def delete(self, requests, *args, **kwargs):
        serializer = IncidentIDSerializer(data=requests.data)
        if not serializer.is_valid():
            retdata = BaseResponse(code=0, msg='error')
            if serializer.errors.get('incident_id'):
                if serializer.errors['incident_id'][0].code == 'required':
                    retdata.error_msg = '事件ID是必须的'
                else:
                    retdata.error_msg = '事件ID不合法,为UUID格式'
            return Response(retdata.result)

        incident = Incident.objects.filter(
            user=requests.user,
            incident_id=serializer.validated_data['incident_id']).first()
        if not incident:
            retdata = BaseResponse(code=0, msg='error', error_msg='事件不存在')
            return Response(retdata.result)

        incident.delete()
        retdata = BaseResponse(code=1, msg='success', success_msg='事件删除成功')
        return Response(retdata.result)
Esempio n. 20
0
    def get(self, request, *args, **kwargs):
        email_serializer = SendEmailCaptchaSerializer(data=request.query_params)

        if not email_serializer.is_valid():
            retdata = BaseResponse(
                code=0,
                msg='error'
            )
            if email_serializer.errors.get('email'):
                if email_serializer.errors['email'][0].code == 'required':
                    retdata.error_msg = '邮箱是必传的'
                else:
                    retdata.error_msg = '邮箱格式错误或不支持的邮箱'
            elif email_serializer.errors.get('flag'):
                if email_serializer.errors['flag'][0].code == 'required':
                    retdata.error_msg = '验证码类型是必传的'
            return Response(retdata.result)

        email = email_serializer.validated_data['email']
        flag = email_serializer.validated_data['flag']

        if flag == 'register':
            context = {
                'text': '注册',
                'flag': flag
            }
        elif flag == 'update':
            context = {
                'text': '修改邮件',
                'flag': flag
            }
        else:
            context = {
                'text': '找回密码',
                'flag': flag
            }

        send_email_captcha.delay(email, context)

        retdata = BaseResponse(
            code=1,
            msg='success',
            success_msg='验证码发送成功'
        )
        return Response(retdata.result)
Esempio n. 21
0
    def patch(self, request, *args, **kwargs):
        faces = Face.objects.filter(user=request.user)
        serializer = UpdateFaceSerializer(instance=faces,
                                          data=request.data,
                                          partial=True)
        if not serializer.is_valid():
            retdata = BaseResponse(code=0, msg='error')
            if serializer.errors.get('face_id'):
                retdata.error_msg = '人脸库ID,为6-20位字母、数字或下划线'
            elif serializer.errors.get('name'):
                retdata.error_msg = '人脸名称不能超过30个字符或为空'
            elif serializer.errors.get('face_image'):
                retdata.error_msg = '请上传一个有效的图片文件'
            return Response(retdata.result)

        face_id = serializer.validated_data.get('face_id')
        name = serializer.validated_data.get('name')
        face_image = serializer.validated_data.get('face_image')
        if not name and not face_image:
            retdata = BaseResponse(code=0, msg='error', error_msg='请传入须修改数据')
            return Response(retdata.result)
        if not face_id:
            retdata = BaseResponse(code=0, msg='error', error_msg='人脸ID是必须的')
            return Response(retdata.result)

        face = faces.filter(face_id=face_id).first()
        if not face:
            retdata = BaseResponse(code=0, msg='error', error_msg='不存在该人脸')
            return Response(retdata.result)

        if face.group.bound:
            retdata = BaseResponse(code=0,
                                   msg='error',
                                   error_msg='所属人脸库已绑定摄像头,请先解除绑定后修改人脸信息')
            return Response(retdata.result)

        face_image = request.data.get('face_image')
        if face_image:
            face_detector = FaceDetection(image=face_image)
            if not face_detector.detect():
                retdata = BaseResponse(code=0,
                                       msg='error',
                                       error_msg='图片中没有人脸或非标准人脸照片')
                return Response(retdata.result)

        new_face_obj = serializer.save()
        retdata = BaseResponse(code=1,
                               msg='success',
                               data=FaceSerializer(new_face_obj).data,
                               success_msg='人脸信息更改成功')
        return Response(retdata.result)
Esempio n. 22
0
    def post(self, request, *args, **kwargs):
        serializer = FaceGroupSerializer(data=request.data)

        if not serializer.is_valid():
            retdata = BaseResponse(code=0, msg='error')
            if serializer.errors.get('face_group_id'):
                if serializer.errors['face_group_id'][0].code == 'required':
                    retdata.error_msg = '人脸库ID是必须的'
                else:
                    retdata.error_msg = '人脸库ID不合法,为6-20位字母、数字或下划线'
            elif serializer.errors.get('name'):
                if serializer.errors['name'][0].code == 'required':
                    retdata.error_msg = '人脸库名称是必须的'
                else:
                    retdata.error_msg = '人脸库名称不得超过30个字符或为空'
            elif serializer.errors.get('description'):
                retdata.error_msg = '人脸库描述不得超过300个字符'
            return Response(retdata.result)

        has_face_group = FaceGroup.objects.filter(
            user=request.user,
            face_group_id=serializer.validated_data['face_group_id']).first()
        if has_face_group:
            retdata = BaseResponse(code=0, msg='error', error_msg='人脸库已存在')
            return Response(retdata.result)

        face_group_obj = serializer.save(user=request.user)

        retdata = BaseResponse(code=1,
                               msg='success',
                               data=FaceGroupSerializer(face_group_obj).data,
                               success_msg='创建人脸库成功')
        return Response(retdata.result)
Esempio n. 23
0
    def post(self, request, *args, **kwargs):
        serializer = FaceSerializer(data=request.data)

        if not serializer.is_valid():
            retdata = BaseResponse(code=0, msg='error')
            if serializer.errors.get('face_id'):
                if serializer.errors['face_id'][0].code == 'required':
                    retdata.error_msg = '人脸ID是必须的'
                else:
                    retdata.error_msg = '人脸ID不合法,为6-20位字母、数字或下划线'
            elif serializer.errors.get('face_group_id'):
                if serializer.errors['face_group_id'][0].code == 'required':
                    retdata.error_msg = '人脸库ID是必须的'
                else:
                    retdata.error_msg = '人脸库ID不合法,为6-20位字母、数字或下划线'
            elif serializer.errors.get('name'):
                if serializer.errors['name'][0].code == 'required':
                    retdata.error_msg = '人脸名称是必须的'
                else:
                    retdata.error_msg = '人脸名称不得超过30个字符或为空'
            elif serializer.errors.get('face_image'):
                if serializer.errors['face_image'][0].code == 'required':
                    retdata.error_msg = '人脸图片base64编码是必须的'
                else:
                    retdata.error_msg = '请上传一个有效的图片文件'
            return Response(retdata.result)

        has_face = Face.objects.filter(
            user=request.user,
            face_id=serializer.validated_data['face_id']).first()
        if has_face:
            retdata = BaseResponse(code=0, msg='error', error_msg='人脸已存在')
            return Response(retdata.result)

        has_face_group_id = FaceGroup.objects.filter(
            user=request.user,
            face_group_id=serializer.validated_data['face_group_id']).first()
        if not has_face_group_id:
            retdata = BaseResponse(code=0,
                                   msg='error',
                                   error_msg='人脸库不存在,无法绑定人脸')
            return Response(retdata.result)

        face_img_b64 = request.data.get('face_image')
        face_detector = FaceDetection(image=face_img_b64)
        if not face_detector.detect():
            retdata = BaseResponse(code=0,
                                   msg='error',
                                   error_msg='图片中没有人脸或非标准人脸照片')
            return Response(retdata.result)

        face_obj = serializer.save(user=request.user)
        redata = BaseResponse(code=1,
                              msg='success',
                              data=FaceSerializer(face_obj).data,
                              success_msg='人脸添加成功')
        return Response(redata.result)
Esempio n. 24
0
    def post(self, request, *args, **kwargs):
        user_serializer = RegisterUserSerializer(data=request.data)

        if not user_serializer.is_valid():
            retdata = BaseResponse(
                code=0,
                msg='error'
            )
            if user_serializer.errors.get('captcha'):
                if user_serializer.errors['captcha'][0].code == 'required':
                    retdata.error_msg = '验证码是必传的'
                else:
                    retdata.error_msg = '验证码格式错误,为5位数字'
            elif user_serializer.errors.get('username'):
                if user_serializer.errors['username'][0].code == 'required':
                    retdata.error_msg = '用户名是必传的'
                else:
                    retdata.error_msg = '用户名不合法,为6到16位字母、数字或下划线'
            elif user_serializer.errors.get('nickname'):
                if user_serializer.errors['nickname'][0].code == 'required':
                    retdata.error_msg = '昵称是必传的'
                else:
                    retdata.error_msg = '昵称不合法, 不得超过20个字符'
            elif user_serializer.errors.get('password'):
                if user_serializer.errors['password'][0].code == 'required':
                    retdata.error_msg = '密码是必传的'
                else:
                    retdata.error_msg = '密码不合法,为6到16位字母、数字或合法符号'
            elif user_serializer.errors.get('email'):
                if user_serializer.errors['email'][0].code == 'required':
                    retdata.error_msg = '邮箱是必传的'
                else:
                    retdata.error_msg = '邮箱格式错误或不支持的邮箱'
            return Response(retdata.result)

        username = user_serializer.validated_data.get('username')
        email = user_serializer.validated_data.get('email')
        captcha = user_serializer.validated_data.get('captcha')

        has_username = User.objects.filter(username=username).first()
        has_email = User.objects.filter(email=email).first()

        if not has_username and not has_email:
            with ValidateCaptcha(email=email, captcha=captcha) as captcha_validator:
                ret = captcha_validator.validate(settings.REGISTER_EMAIL_CAPTCHA_KEY_NAME)

                if not ret['flag']:
                    retdata = BaseResponse(
                        code=0,
                        msg='error',
                        error_msg=ret['result']
                    )
                    return Response(retdata.result)

            user_serializer.save()
            retdata = BaseResponse(
                code=1,
                msg='success',
                success_msg='用户创建成功'
            )
            return Response(retdata.result)

        retdata = BaseResponse(
            code=0,
            msg='error',
            error_msg='用户名或邮箱已存在'
        )
        return Response(retdata.result)
Esempio n. 25
0
    def patch(self, request, *args, **kwargs):
        face_groups = FaceGroup.objects.filter(user=request.user)
        serializer = FaceGroupSerializer(instance=face_groups,
                                         data=request.data,
                                         partial=True)

        if not serializer.is_valid():
            retdata = BaseResponse(code=0, msg='error')
            if serializer.errors.get('face_group_id'):
                retdata.error_msg = '人脸库ID不合法,为6-20位字母、数字或下划线'
            elif serializer.errors.get('name'):
                retdata.error_msg = '人脸库名称不得超过30个字符或为空'
            elif serializer.errors.get('description'):
                retdata.error_msg = '人脸库描述不得超过300个字符'
            return Response(retdata.result)

        face_group_id = serializer.validated_data.get('face_group_id')
        name = serializer.validated_data.get('name')
        description = serializer.validated_data.get('description')
        if not name and not description:
            retdata = BaseResponse(code=0, msg='error', error_msg='请传入须修改数据')
            return Response(retdata.result)

        if not face_group_id:
            retdata = BaseResponse(code=0, msg='error', error_msg='必须传入分组ID')
            return Response(retdata.result)

        face_group = FaceGroup.objects.filter(
            user=request.user, face_group_id=face_group_id).first()
        if not face_group:
            retdata = BaseResponse(code=0, msg='error', error_msg='无指定人脸库')
            return Response(retdata.result)

        if face_group.bound:
            retdata = BaseResponse(code=0,
                                   msg='error',
                                   error_msg='人脸库已绑定摄像头,请先解除绑定后修改信息')
            return Response(retdata.result)

        new_face_group_obj = serializer.save()
        retdata = BaseResponse(
            code=1,
            msg='success',
            data=FaceGroupSerializer(new_face_group_obj).data,
            success_msg='人脸库信息修改成功')
        return Response(retdata.result)
Esempio n. 26
0
    def get(self, request, *args, **kwargs):
        """
        Check if user exists
        """
        if not request.query_params:
            retdata = BaseResponse(
                code=0,
                msg='error',
                error_msg='传入参数不能为空'
            )
            return Response(retdata.result)

        query_serializer = HasUserSerializer(data=request.query_params)

        if not query_serializer.is_valid():
            retdata = BaseResponse(
                code=0,
                msg='error'
            )
            if query_serializer.errors.get('email'):
                retdata.error_msg = '邮箱格式错误或不支持的邮箱'
            elif query_serializer.errors.get('username'):
                retdata.error_msg = '用户名不合法,为6到16位字母、数字或下划线'
            return Response(retdata.result)

        username = query_serializer.validated_data.get('username', False)
        email = query_serializer.validated_data.get('email', False)

        if username and not email:
            has_user_username = User.objects.filter(username=username).first()

            if has_user_username:
                retdata = BaseResponse(
                    code=1,
                    msg='success',
                    data=1,
                    success_msg='用户名已存在'
                )
                return Response(retdata.result)

            retdata = BaseResponse(
                code=1,
                msg='success',
                data=0,
                success_msg='用户名不存在,可创建'
            )
            return Response(retdata.result)

        elif email and not username:
            has_user_email = User.objects.filter(email=email).first()

            if has_user_email:
                retdata = BaseResponse(
                    code=1,
                    msg='success',
                    data=1,
                    success_msg='该邮箱已绑定其他用户'
                )
                return Response(retdata.result)
            retdata = BaseResponse(
                code=1,
                msg='success',
                data=0,
                success_msg='该邮箱未绑定其他用户,可绑定新用户'
            )
            return Response(retdata.result)

        else:
            retdata = BaseResponse(
                code=0,
                msg='error',
                error_msg='用户名和邮箱不能同时传入或请求参数不合法'
            )
            return Response(retdata.result)
Esempio n. 27
0
    def delete(self, request, *args, **kwargs):
        user_serializer = CloseUserSerializer(data=request.data)

        if not user_serializer.is_valid():
            retdata = BaseResponse(
                code=0,
                msg='error'
            )
            if user_serializer.errors.get('username'):
                retdata.error_msg = '用户名不合法,为6到16位字母、数字或下划线'
            elif user_serializer.errors.get('email'):
                retdata.error_msg = '邮箱格式错误或不支持的邮箱'
            elif user_serializer.errors.get('password'):
                if user_serializer.errors['password'][0].code == 'required':
                    retdata.error_msg = '账号或密码是必须的'
                else:
                    retdata.error_msg = '密码不合法,为6到16位字母、数字或合法符号'
            elif user_serializer.errors.get('force'):
                retdata.error_msg = 'force字段是bool类型'
            return Response(retdata.result)

        username = user_serializer.validated_data.get('username', False)
        email = user_serializer.validated_data.get('email', False)
        password = user_serializer.validated_data['password']

        if username and not email:
            user_obj = User.objects.filter(username=username).first()
        elif email and not username:
            user_obj = User.objects.filter(email=email).first()
        elif email and username:
            retdata = BaseResponse(
                code=0,
                msg='error',
                error_msg='用户名和邮箱不能同时传入'
            )
            return Response(retdata.result)
        else:
            retdata = BaseResponse(
                code=0,
                msg='error',
                error_msg='账号是必须的'
            )
            return Response(retdata.result)

        if not user_obj:
            retdata = BaseResponse(
                code=0,
                msg='error',
                error_msg='该用户未注册'
            )
            return Response(retdata.result)

        if not user_obj.check_password(raw_password=password):
            retdata = BaseResponse(
                code=0,
                msg='error',
                error_msg='密码错误'
            )
            return Response(retdata.result)

        cameras = Camera.objects.filter(user=user_obj)
        if cameras:
            for camera in cameras:
                if camera.state in (20, 21, 22):
                    if not user_serializer.validated_data['force']:
                        retdata = BaseResponse(
                            code=0,
                            msg='error',
                            error_msg='该用户存在执行任务'
                        )
                        return Response(retdata.result)

                    task_id = user_obj.username + '_' + camera.camera_id
                    periodic_task = PeriodicTask.objects.filter(name=task_id).first()
                    periodic_task.enabled = False
                    periodic_task.save()
                    periodic_task.delete()

        user_obj.delete()
        retdata = BaseResponse(
            code=1,
            msg='success',
            success_msg='用户注销成功'
        )
        return Response(retdata.result)
Esempio n. 28
0
    def patch(self, request, *args, **kwargs):
        data_serializer = UpdateEmailSerializer(data=request.data)

        if not data_serializer.is_valid():
            retdata = BaseResponse(
                code=0,
                msg='error'
            )
            if data_serializer.errors.get('username'):
                retdata.error_msg = '用户名不合法,为6到16位字母、数字或下划线'
            elif data_serializer.errors.get('email'):
                retdata.error_msg = '邮箱格式错误或不支持的邮箱'
            elif data_serializer.errors.get('password'):
                if data_serializer.errors['password'][0].code == 'required':
                    retdata.error_msg = '账号或密码是必须的'
                else:
                    retdata.error_msg = '密码不合法,为6到16位字母、数字或合法符号'
            elif data_serializer.errors.get('new_email'):
                if data_serializer.errors['new_email'][0].code == 'required':
                    retdata.error_msg = '新邮箱是必须的'
                else:
                    retdata.error_msg = '新邮箱格式错误或不支持的邮箱'
            elif data_serializer.errors.get('captcha'):
                if data_serializer.errors['captcha'][0].code == 'required':
                    retdata.error_msg = '验证码是必须的'
                else:
                    retdata.error_msg = '验证码格式错误,为5位数字'
            return Response(retdata.result)

        username = data_serializer.validated_data.get('username', False)
        email = data_serializer.validated_data.get('email', False)
        captcha = data_serializer.validated_data['captcha']
        new_email = data_serializer.validated_data['new_email']
        password = data_serializer.validated_data['password']

        if username and not email:
            user_obj = User.objects.filter(username=username).first()
        elif email and not username:
            user_obj = User.objects.filter(email=email).first()
        elif email and username:
            retdata = BaseResponse(
                code=0,
                msg='error',
                error_msg='用户名与邮箱不能同时传入'
            )
            return Response(retdata.result)
        else:
            retdata = BaseResponse(
                code=0,
                msg='error',
                error_msg='账号必须传入'
            )
            return Response(retdata.result)

        has_email = User.objects.filter(email=new_email).first()

        flag = user_obj and not has_email
        if flag:
            with ValidateCaptcha(email=new_email, captcha=captcha) as captcha_validator:
                ret = captcha_validator.validate(settings.UPDATE_EMAIL_CAPTCHA_KEY_NAME)

                if not ret['flag']:
                    retdata = BaseResponse(
                        code=0,
                        msg='error',
                        error_msg=ret['result']
                    )
                    return Response(retdata.result)

            if user_obj.check_password(raw_password=password):
                user_obj.email = new_email
                user_obj.save()

                retdata = BaseResponse(
                    code=1,
                    msg='success',
                    success_msg='修改邮件成功'
                )
                return Response(retdata.result)

            retdata = BaseResponse(
                code=0,
                msg='error',
                error_msg='用户验证失败,密码错误'
            )
            return Response(retdata.result)

        elif not user_obj:
            retdata = BaseResponse(
                code=0,
                msg='error',
                error_msg='账户不存在'
            )
            return Response(retdata.result)

        retdata = BaseResponse(
            code=0,
            msg='error',
            error_msg='新邮件已绑定到其他用户'
        )
        return Response(retdata.result)
Esempio n. 29
0
    def patch(self, request, *args, **kwargs):
        user_serializer = UpdatePasswordSerializer(data=request.data)

        if not user_serializer.is_valid():
            retdata = BaseResponse(
                code=0,
                msg='error'
            )
            if user_serializer.errors.get('username'):
                retdata.error_msg = '用户名不合法,为6到16位字母、数字或下划线'
            elif user_serializer.errors.get('email'):
                retdata.error_msg = '邮箱格式错误或不支持的邮箱'
            elif user_serializer.errors.get('password'):
                if user_serializer.errors['password'][0].code == 'required':
                    retdata.error_msg = '账号或密码是必须的'
                else:
                    retdata.error_msg = '密码不合法,为6到16位字母、数字或合法符号'
            elif user_serializer.errors.get('new_password'):
                if user_serializer.errors['new_password'][0].code == 'required':
                    retdata.error_msg = '新密码是必须的'
                else:
                    retdata.error_msg = '密码不合法,为6到16位字母、数字或合法符号'
            return Response(retdata.result)

        username = user_serializer.validated_data.get('username', False)
        email = user_serializer.validated_data.get('email', False)
        password = user_serializer.validated_data['password']
        new_password = user_serializer.validated_data['new_password']

        if username and not email:
            user_obj = User.objects.filter(username=username).first()
        elif email and not username:
            user_obj = User.objects.filter(email=email).first()
        elif email and username:
            retdata = BaseResponse(
                code=0,
                msg='error',
                error_msg='邮箱和用户名不能同时传入'
            )
            return Response(retdata.result)
        else:
            retdata = BaseResponse(
                code=0,
                msg='error',
                error_msg='账号是必须的'
            )
            return Response(retdata.result)

        if user_obj is None:
            retdata = BaseResponse(
                code=0,
                msg='error',
                error_msg='用户不存在'
            )
            return Response(retdata.result)

        elif user_obj.check_password(raw_password=password):
            user_obj.set_password(new_password)
            user_obj.save()

            retdata = BaseResponse(
                code=1,
                msg='success',
                success_msg='密码修改成功'
            )
            return Response(retdata.result)

        retdata = BaseResponse(
            code=0,
            msg='error',
            error_msg='原密码错误'
        )
        return Response(retdata.result)
Esempio n. 30
0
    def patch(self, request, *args, **kwargs):
        data_serializer = ForgotPasswordSerializer(data=request.data)

        if not data_serializer.is_valid():
            retdata = BaseResponse(
                code=0,
                msg='error'
            )
            if data_serializer.errors.get('email'):
                if data_serializer.errors['email'][0].code == 'required':
                    retdata.error_msg = '邮箱是必传的'
                else:
                    retdata.error_msg = '邮箱格式不合法或不支持的邮箱'
            elif data_serializer.errors.get('new_password'):
                if data_serializer.errors['new_password'][0].code == 'required':
                    retdata.error_msg = '新密码是必传的'
                else:
                    retdata.error_msg = '密码不合法,为6到16位字母、数字或合法符号'
            elif  data_serializer.errors.get('captcha'):
                if data_serializer.errors['captcha'][0].code == 'required':
                    retdata.error_msg = '验证码是必传的'
                else:
                    retdata.error_msg = '验证码格式错误,为5位数字'
            return Response(retdata.result)

        email = data_serializer.validated_data['email']
        captcha = data_serializer.validated_data['captcha']
        new_password = data_serializer.validated_data['new_password']

        user_obj = User.objects.filter(email=email).first()

        if user_obj:
            with ValidateCaptcha(email=email, captcha=captcha) as captcha_validator:
                ret = captcha_validator.validate(settings.FORGOT_PASSWORD_CAPTCHA_KEY_NAME)

                if not ret['flag']:
                    retdata = BaseResponse(
                        code=0,
                        msg='error',
                        error_msg=ret['result']
                    )
                    return Response(retdata.result)

            user_obj.set_password(new_password)
            user_obj.save()

            retdata = BaseResponse(
                code=1,
                msg='success',
                success_msg='找回密码成功'
            )
            return Response(retdata.result)

        retdata = BaseResponse(
            code=0,
            msg='error',
            error_msg='账户不存在'
        )
        return Response(retdata.result)