예제 #1
0
class TeacherDeleteAllView(ModelViewSet):
    queryset = Teacher.objects.all()

    @swagger_auto_schema(
        operation_summary="根据id列表批量删除老师信息及用户信息",
        manual_parameters=[
            openapi.Parameter('TOKEN',
                              openapi.IN_HEADER,
                              type=openapi.TYPE_STRING,
                              description='管理员TOKEN'),
        ],
        request_body=request_body(
            properties={
                'id_list': array_schema('老师ID列表', it=integer_schema())
            }),
    )
    def destroy_all2(self, request, *args, **kwargs):
        check_token = pd_adm_token(request)
        if check_token:
            return check_token
        # print(request.data)
        list = request.data.get("id_list")
        print(list)
        # # 先删除用户
        for i in list:
            check_del = del_user_and_user_details(0, int(i))
        if check_del:
            return check_del
        # 删除老师
        # super().destroy(request, *args, **kwargs)
        return response_success_200(message="成功")
예제 #2
0
class WeekInsertView(mixins.CreateModelMixin, GenericViewSet):
    queryset = Week.objects.all()
    serializer_class = WeekInfoSerializersAll

    @swagger_auto_schema(
        operation_summary="添加数据 ",
        request_body=request_body(properties={
            'index': integer_schema('周的下标'),
            'title': string_schema('描述'),
        }),
        manual_parameters=[
            openapi.Parameter('TOKEN',
                              openapi.IN_HEADER,
                              type=openapi.TYPE_STRING,
                              description='超级管理员的token'),
        ])
    def create(self, request, *args, **kwargs):
        check_token = pd_super_adm_token(request)
        if check_token:
            return check_token

        # 添加用户信息
        index = request.data.get('index')
        # 用户index否存在
        if self.queryset.filter(index=index):
            return response_error_400(message="index 已存在")

        resp = super().create(request)
        return response_success_200(data=resp.data)
예제 #3
0
class ParentInsertView(mixins.CreateModelMixin, GenericViewSet):
    queryset = Parent.objects.all()
    serializer_class = ParentInfoSerializersInsert

    @swagger_auto_schema(operation_summary="管理员添加数据",
                         request_body=request_body(
                             properties={
                                 'name': string_schema('家长姓名'),
                                 'card': string_schema('身份证'),
                                 'phone_number': string_schema('电话号码'),
                                 'qq': string_schema('QQ'),
                                 'email': string_schema('邮件'),
                             }),
                         manual_parameters=[
                             openapi.Parameter('TOKEN',
                                               openapi.IN_HEADER,
                                               type=openapi.TYPE_STRING,
                                               description='管理员TOKEN'),
                         ])
    def create(self, request, *args, **kwargs):
        check_token = pd_adm_token(request)
        if check_token:
            return check_token

        check_info = check_parent_insert_info(request)
        if check_info:
            return check_info

        # 创建用户详情和用户
        create_user_details_and_user(request, 2)

        resp = super().create(request)
        return response_success_200(data=resp.data)
예제 #4
0
class StudentDeleteAllView(ModelViewSet):
    queryset = Student.objects.all()

    @swagger_auto_schema(
        operation_summary="根据id列表批量删除学生信息及用户信息",
        manual_parameters=[
            openapi.Parameter('TOKEN',
                              openapi.IN_HEADER,
                              type=openapi.TYPE_STRING,
                              description='管理员TOKEN'),
        ],
        request_body=request_body(
            properties={
                'id_list': array_schema('学生ID列表', it=integer_schema())
            }),
    )
    def destroy_all2(self, request, *args, **kwargs):
        check_token = pd_token(request)
        if check_token:
            return check_token
        role = request.auth
        if role not in [-2, -1, 3]:
            return response_success_200(code=STATUS_TOKEN_NO_AUTHORITY,
                                        message="没有权限")
        # print(request.data)
        list = request.data.get("id_list")
        print(list)
        # # 先删除用户
        for i in list:
            check_del = del_user_and_user_details(1, int(i))
        if check_del:
            return check_del
        return response_success_200(message="成功")
예제 #5
0
class ClassDeleteAllView(ModelViewSet):
    queryset = Class.objects.all()

    @swagger_auto_schema(
        operation_summary="根据id列表批量删除班级信息及用户信息",
        manual_parameters=[
            openapi.Parameter('TOKEN',
                              openapi.IN_HEADER,
                              type=openapi.TYPE_STRING,
                              description='管理员TOKEN'),
        ],
        request_body=request_body(
            properties={
                'id_list': array_schema('班级ID列表', it=integer_schema())
            }),
    )
    def destroy_all(self, request, *args, **kwargs):
        check_token = pd_adm_token(request)
        if check_token:
            return check_token
        # print(request.data)
        list = request.data.get("id_list")
        message = ""
        print(list)
        for i in list:
            if not Class.objects.filter(pk=i):
                message += "班级i+未找到"
            else:
                Class.objects.filter(pk=i).delete()
        return response_success_200(message="批量删除删除结束," + message)
예제 #6
0
class UserInsertView(mixins.CreateModelMixin,
                     GenericViewSet):
    """
    create:
    添加一条数据

    无描述
    """
    queryset = User.objects.all()
    serializer_class = UserInfoSerializers

    @swagger_auto_schema(
        # request_body=openapi.Schema(
        #     type=openapi.TYPE_OBJECT,
        #     properties={
        #         'code': openapi.Schema(type=openapi.TYPE_STRING, description="这是date"),
        #         'username': openapi.Schema(type=openapi.TYPE_INTEGER),
        #     }
        # ),
        request_body=request_body(properties={
            'user_name': string_schema('用户名'),
            'password': string_schema('密码'),
            'phone_number': string_schema('手机号'),
            'code': string_schema('验证码')
        })
    )
    # request_body=request_body(property={
    #             "code": string_schema("123")
    #         }),
    def create(self, request, *args, **kwargs):
        message = 'SUCCESS'
        user_name = request.data.get('user_name')
        phone_number = request.data.get("phone_number")
        password = request.data.get('password')

        try:
            if not pd_phone_number(phone_number):
                message = "手机号格式错误"
                raise UserWarning

            if check_user_name(user_name):
                message = "用户名已存在"
                return Response({"status": STATUS_USER_NAME_DUPLICATE, "message": message})
            if check_phone_number(phone_number):
                message = "该手机号已被注册"
                return Response({"status": STATUS_PHONE_NUMBER_DUPLICATE, "message": message})
            if not judge_code(phone_number, request.data.get('code')):
                message = "验证码不正确"
                return Response({"status": STATUS_CODE_ERROR, "message": message})

        except UserWarning:
            raise exceptions.ParseError(message)

        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)
        headers = self.get_success_headers(serializer.data)
        return Response({"status": STATUS_SUCCESS, "data": serializer.data}, status=status.HTTP_201_CREATED, headers=headers)
class TimetableInsertView(mixins.CreateModelMixin, GenericViewSet):
    queryset = Timetable.objects.all()
    serializer_class = TimetableAllSerializersInsert

    @swagger_auto_schema(operation_description="添加课程到课表中",
                         operation_summary="timetable添加课程",
                         request_body=request_body(
                             properties={
                                 'timetable_id': integer_schema('课表id'),
                                 'course_id': integer_schema('课程id'),
                             }))
    def add_course(self, request):
        timetable_id = request.data.get('timetable_id')
        course_id = request.data.get('course_id')

        result = views.add_course(timetable_id, course_id)
        return result if result else response_success_200(message="添加成功")

    @swagger_auto_schema(
        request_body=request_body(properties={
            'clazz': integer_schema('班级id'),
            'week': integer_schema('星期'),
        }))
    def create(self, request, *args, **kwargs):
        clazz = request.data.get('clazz')
        week = request.data.get('week')

        if not Class.objects.filter(id=clazz):
            message = "班级ID信息不存在"
            return response_success_200(status=STATUS_PARAMETER_ERROR,
                                        message=message)
        if Timetable.objects.filter(clazz_id=clazz).filter(week=week):
            message = "课程已经添加"
            return response_success_200(status=STATUS_PARAMETER_ERROR,
                                        message=message)
        # 把课程添加到课程表中
        resp = super().create(request)
        return response_success_200(data=resp.data)
예제 #8
0
class RegularAddRecordInsertView(mixins.CreateModelMixin, GenericViewSet):
    queryset = RegularAddRecord.objects.all()
    serializer_class = RegularAddRecordInfoSerializersInsert

    @swagger_auto_schema(
        operation_summary="添加数据 ",
        operation_description=f"当前的时间戳是 {int(time.time())}",
        request_body=request_body(
            properties={
                'describe':
                string_schema(description="我是描述", default="默认值", title="标题"),
                'regular':
                integer_schema('regular的id', default=1),
                'reminder_time':
                integer_schema('提醒时间'),
                'start_time':
                integer_schema('每天开始的时间'),
                'end_time':
                integer_schema('每天结束的时间'),
                'start_date':
                integer_schema('开始日期时间'),
                'end_date':
                integer_schema('结束日期时间'),
                'week':
                array_schema('周'),
            }),
        manual_parameters=[
            openapi.Parameter('TOKEN',
                              openapi.IN_HEADER,
                              type=openapi.TYPE_STRING,
                              description='用户的token'),
        ])
    def create(self, request, *args, **kwargs):
        # 先检测用户输入的时间的规范性
        check_time = check_insert_time(request)
        if check_time:
            return check_time

        check_token = pd_token(request)
        if check_token:
            return check_token

        resp = super().create(request)
        # 保存用户的id
        regular = RegularAddRecord.objects.get(id=resp.data['id'])
        regular.user_id = request.user
        regular.save()
        return response_success_200(data=resp.data, message="添加成功")
class TimetableSelectView(mixins.ListModelMixin, mixins.RetrieveModelMixin,
                          GenericViewSet):
    queryset = Timetable.objects.all()
    serializer_class = TimetableDepth2SerializersInsert

    @swagger_auto_schema(
        operation_summary="查询班级的课表",
        operation_description="传入班级id",
        request_body=request_body(properties={
            'class_id': integer_schema('班级id'),
        }))
    def select_class(self, request):
        class_id = request.data.get('class_id')
        return select_class(self, class_id)

    @swagger_auto_schema(operation_summary="token查询课表",
                         operation_description="传入token",
                         request_body=no_body,
                         manual_parameters=[
                             openapi.Parameter('TOKEN',
                                               openapi.IN_HEADER,
                                               type=openapi.TYPE_STRING,
                                               description='TOKEN')
                         ])
    def select_student_timetable_by_token(self, request):
        # 判断token
        check_token = pd_token(request)
        if check_token:
            return check_token

        if request.auth != 1:
            return response_success_200(code=STATUS_PARAMETER_ERROR,
                                        message="需要传入学生token")

        try:
            clazz = Student.objects.get(user_id=request.user).clazz
            if not clazz:
                return response_success_200(code=STATUS_PARAMETER_ERROR,
                                            message="请先加入班级")
            return select_class(self, clazz.id)
        except Student.DoesNotExist:
            return response_success_200(code=STATUS_PARAMETER_ERROR,
                                        message="未找到该学生")
예제 #10
0
class Other(APIView):
    """
    post:
    发送验证码

    传入一个手机号
    """
    @swagger_auto_schema(request_body=request_body(
        {"phone_number": string_schema("填入手机号")}, required=['phone_number']))
    def post(self, request, *args, **kwargs):
        phone_number = request.data.get('phone_number', '')
        try:
            if not pd_phone_number(phone_number):
                raise UserWarning
            send_code(phone_number)
        except UserWarning:
            return response_success_200(code=STATUS_PHONE_NUMBER_ERROR,
                                        message='参数错误或手机号不合法')
        return response_success_200(code=STATUS_200_SUCCESS,
                                    message="发送验证码成功,验证码在10分钟内有效")
class RegularCategoryInsertView(mixins.CreateModelMixin, GenericViewSet):
    queryset = RegularCategory.objects.all()
    serializer_class = RegularCategoryInfoSerializersAll

    @swagger_auto_schema(
        operation_summary="添加数据 ",
        request_body=request_body(properties={
            'title': string_schema('描述'),
        }),
        manual_parameters=[
            openapi.Parameter('TOKEN',
                              openapi.IN_HEADER,
                              type=openapi.TYPE_STRING,
                              description='超级管理员的token'),
        ])
    def create(self, request, *args, **kwargs):
        check_token = pd_super_adm_token(request)
        if check_token:
            return check_token

        resp = super().create(request)
        return response_success_200(data=resp.data)
예제 #12
0
class CourseInsertView(mixins.CreateModelMixin, GenericViewSet):
    queryset = Course.objects.all()
    serializer_class = CourseALlSerializers

    @swagger_auto_schema(request_body=request_body(
        properties={
            'timetable': integer_schema('课表id'),
            'teacher': integer_schema('老师ID'),
            'course_name': string_schema('课程名'),
            'index': integer_schema('第几节课'),
        }),
                         manual_parameters=[
                             openapi.Parameter('TOKEN',
                                               openapi.IN_HEADER,
                                               type=openapi.TYPE_STRING,
                                               description='管理员TOKEN'),
                         ])
    def create(self, request, *args, **kwargs):
        teacher_info = request.data.get('teacher')
        timetable_id = request.data.get('timetable')
        # print(Class.objects.filter(grade_name=grade_name))
        # if Class.objects.filter(grade_name=grade_name):
        #     message = "班级已经存在"
        #     return response_error_400(status=STATUS_CODE_ERROR, message=message)
        if not Teacher.objects.filter(id=teacher_info):
            message = "老师ID信息不存在"
            return response_success_200(status=STATUS_PARAMETER_ERROR,
                                        message=message)
        if not Timetable.objects.filter(id=timetable_id):
            message = "课程表不存在"
            return response_success_200(status=STATUS_PARAMETER_ERROR,
                                        message=message)
        # 把课程添加到课程表中
        resp = super().create(request)
        # Timetable.objects.get(id=timetable_id).course_info.add(resp.data['id'])
        print(resp.data)
        return response_success_200(data=resp.data)
예제 #13
0
class TeacherInsertView(mixins.CreateModelMixin,
                        GenericViewSet):
    queryset = Teacher.objects.all()
    serializer_class = TeacherInfoSerializersInsert

    @swagger_auto_schema(
        operation_summary="教师信息单独导入",
        operation_description="说明:身份证和电话号码必须未注册过,学校必须存在",
        request_body=request_body(properties={
            'name': string_schema('老师姓名'),
            'card': string_schema('身份证'),
            'title': string_schema('职称'),
            'phone_number': string_schema('电话号码'),
            'school': integer_schema('学校id'),
            'qq': string_schema('QQ'),
            'email': string_schema('邮件'),
        }),
        manual_parameters=[
            openapi.Parameter('TOKEN', openapi.IN_HEADER, type=openapi.TYPE_STRING, description='管理员TOKEN'),
        ]
    )
    def create(self, request, *args, **kwargs):
        check_token = pd_adm_token(request)
        if check_token:
            return check_token

        # 检测teacher插入的合法性
        check_info = check_teacher_insert_info(request)
        if check_info:
            return check_info

        # 创建用户详情和用户
        create_user_details_and_user(request, 0)

        resp = super().create(request)
        return response_success_200(data=resp.data)
예제 #14
0
class Other(APIView):
    """
    post:
    发送验证码

    传入一个手机号
    """

    @swagger_auto_schema(
        request_body=request_body({
            "phone_number": string_schema("填入手机号")
        },
            required=['phone_number']
        )
    )
    def post(self, request, *args, **kwargs):
        phone_number = request.data.get('phone_number', '')
        try:
            if not pd_phone_number(phone_number):
                raise UserWarning
            send_code(phone_number)
        except UserWarning:
            raise exceptions.ParseError('参数错误或手机号不合法')
        return Response({"status": STATUS_CODE_SUCCESS, "message": "发送验证码成功,验证码在2分钟内有效"})
class UserUpdatePassword(ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserInfoSerializersUpdate

    @swagger_auto_schema(
        operation_summary="手机号验证码修改密码",
        operation_description="传入手机号",
        request_body=request_body(
            required=["phone_number", "code", 'password'],
            properties={
                "phone_number": string_schema('手机号,必填'),
                "code": string_schema('验证码'),
                'password': string_schema('密码', f=FORMAT_PASSWORD),
            }
        ),
        manual_parameters=[
            openapi.Parameter('TOKEN', openapi.IN_HEADER, type=openapi.TYPE_STRING, description='TOKEN')
        ]
    )
    def update_password_by_phone(self, request):
        check_token = pd_token(request)
        if check_token:
            return check_token

        phone_number = request.data.get("phone_number")
        password = request.data.get("password")
        # 检测密码的长度
        check = pd_password(password)
        if check:
            return response_success_200(code=STATUS_400_BAD_REQUEST, message=check)

        # 检测手机号是否被注册
        if not User.objects.filter(phone_number=phone_number):
            return response_success_200(code=STATUS_NOT_FOUND_ERROR, message=f"该手机号({phone_number})未被注册!!")
        # 检测验证码是否正确
        if not judge_code(phone_number, request.data.get('code')):
            message = "验证码不正确"
            return response_success_200(code=STATUS_CODE_ERROR, message=message)
        # 获得用户信息
        instance = self.queryset.get(phone_number=phone_number)
        # 如果查询出来的信息和token中的信息不一样,则返回权限不够
        if request.user != instance.pk:
            return response_success_200(code=STATUS_TOKEN_NO_AUTHORITY, message=f"没有权限修改({phone_number})")

        # 设置密码
        instance.password = my_encode(password)
        # 保存
        instance.save()
        serializer = self.get_serializer(instance)
        return response_success_200(message="成功!!!!")

    @swagger_auto_schema(
        operation_summary="根据旧密码修改密码",
        operation_description="密码",
        request_body=request_body(
            required=["old_password", 'new_password'],
            properties={
                "old_password": string_schema('旧的密码', f=FORMAT_PASSWORD),
                "new_password": string_schema('新密码', f=FORMAT_PASSWORD),
            }
        ),
        manual_parameters=[
            openapi.Parameter('TOKEN', openapi.IN_HEADER, type=openapi.TYPE_STRING, description='TOKEN')
        ]
    )
    def update_password_by_password(self, request):
        check_token = pd_token(request)
        if check_token:
            return check_token

        old_password = request.data.get("old_password")
        new_password = request.data.get("new_password")
        # 检测密码的长度
        check = pd_password(new_password)
        if check:
            return response_success_200(code=STATUS_400_BAD_REQUEST, message=check)
        # 获得用户信息
        instance = self.queryset.get(pk=request.user)
        print(my_decode(instance.password))
        # 判断输入的密码和原密码一样吗
        if my_encode(old_password) != instance.password:
            return response_success_200(code=STATUS_500_INTERNAL_SERVER_ERROR, message=f"原输入密码错误")

        # 设置密码
        instance.password = my_encode(new_password)
        # 保存
        instance.save()
        serializer = self.get_serializer(instance)
        return response_success_200(message="成功!!!!")

    def get_object(self):
        if self.action == "update_password_by_phone" or self.action == "update_password_by_password":
            pk = self.request.user
            # return self.queryset.get(user=user_id)
            return get_object_or_404(self.queryset, pk=pk)
        return super().get_object()
예제 #16
0
class ClassInsertView(mixins.CreateModelMixin, GenericViewSet):
    """
    create:
    添加一条数据

    无描述
    """

    queryset = Class.objects.all()
    serializer_class = ClassInfoSerializers

    @swagger_auto_schema(request_body=request_body(
        properties={
            'teacher': integer_schema('辅导员ID'),
            'school': integer_schema('学校ID'),
            'class_name': string_schema('班级名')
        }),
                         manual_parameters=[
                             openapi.Parameter('TOKEN',
                                               openapi.IN_HEADER,
                                               type=openapi.TYPE_STRING,
                                               description='管理员TOKEN'),
                         ])
    def create(self, request, *args, **kwargs):
        check_token = pd_adm_token(request)
        if check_token:
            return check_token

        teacher_id = request.data.get('teacher')
        class_name = request.data.get('class_name')
        school_id = request.data.get('school')

        print(class_name)
        if Class.objects.filter(school_id=school_id).filter(
                class_name=class_name):
            message = "班级已经存在"
            return response_success_200(code=STATUS_PARAMETER_ERROR,
                                        message=message)
        if not Teacher.objects.filter(id=teacher_id):
            message = "老师ID信息不存在"
            return response_success_200(code=STATUS_PARAMETER_ERROR,
                                        message=message)

        if not School.objects.filter(id=school_id):
            message = "学校ID信息不存在"
            return response_success_200(code=STATUS_CODE_ERROR,
                                        message=message)

        teacher = Teacher.objects.get(id=teacher_id)
        headmaster_id = teacher.user_id
        try:
            clazz = self.queryset.create(headmaster_id=headmaster_id,
                                         school_id=school_id,
                                         class_name=class_name)
        #     一对一重复报错
        except IntegrityError:
            return response_success_200(message="该老师已有班级")

        # 修改老师的信息为管理员
        user = User.objects.get(id=teacher.user_id)
        teacher.identity = "辅导员"
        user.role = 3
        user.save()
        teacher.save()

        return response_success_200(data=clazz.to_json())
예제 #17
0
class RegularAddRecordOtherView(ModelViewSet):
    queryset = RegularAddRecord.objects.all()
    serializer_class = RegularAddRecordInfoSerializersInsert

    @swagger_auto_schema(
        operation_summary="根据id删除RegularAddRecord的信息",
        required=[],
        manual_parameters=[
            openapi.Parameter('TOKEN',
                              openapi.IN_HEADER,
                              type=openapi.TYPE_STRING,
                              description='用户TOKEN')
        ],
    )
    def destroy(self, request, *args, **kwargs):
        # 需要修改的检测
        pk = kwargs['pk']

        check_token = pd_token(request)
        if check_token:
            return check_token

        # 检查权限
        check = check_authority(self, request, pk)
        if check:
            return check

        # 删除
        super().destroy(request, *args, **kwargs)
        return response_success_200(message="成功")

    @swagger_auto_schema(
        operation_summary="修改!!",
        operation_description=f"当前的时间戳是 {int(time.time())}",
        request_body=request_body(
            properties={
                'describe':
                string_schema(description="我是描述", default="默认值", title="标题"),
                'regular':
                integer_schema('描述', default=1),
                'reminder_time':
                integer_schema('提醒时间'),
                'start_time':
                integer_schema('每天开始的时间'),
                'end_time':
                integer_schema('每天结束的时间'),
                'start_date':
                integer_schema('开始日期时间'),
                'end_date':
                integer_schema('结束日期时间'),
                'week':
                array_schema('周'),
            }),
        manual_parameters=[
            openapi.Parameter('TOKEN',
                              openapi.IN_HEADER,
                              type=openapi.TYPE_STRING,
                              description='用户的TOKEN')
        ])
    def partial_update(self, request, *args, **kwargs):
        # 需要修改的检测
        pk = kwargs['pk']

        check_token = pd_token(request)
        if check_token:
            return check_token

        # 检查权限
        check = check_authority(self, request, pk)
        if check:
            return check
        # 判断时间
        check_time = check_update_time(request, pk)
        if check_time:
            return check_time

        resp = super().partial_update(request, *args, **kwargs)

        return response_success_200(data=resp.data)