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="成功")
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)
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)
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="成功")
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)
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)
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="未找到该学生")
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)
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)
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)
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()
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())
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)