예제 #1
0
 def perform_get_object(self):
     try:
         homework_id = self.request.query_params['homework']
     except KeyError:
         raise ValidationError()
     teacher_id = get_jwt_request_uid(self.request)
     try:
         homework: Homework = Homework.objects.filter(
             course__teacher__id=teacher_id).get(pk=homework_id)
     except Homework.DoesNotExist:
         raise PermissionDenied()
     return homework.submits.filter(reviewed=False).first()
예제 #2
0
    def _validate(self, attrs):
        available_since: datetime = attrs['available_since']
        deadline: datetime = attrs['deadline']
        if available_since > deadline:
            raise ValidationError('可用时间不能晚于截止日期!')
        total_score: float = attrs['total_score']
        if total_score < 0.0:
            raise ValidationError('作业满分不能为负数!')

        course: Course = attrs['course']
        teacher_id = get_jwt_request_uid(self.context['request'])
        if course.teacher.id != teacher_id:
            raise ValidationError('作业的课程不是当前用户开设的课程!')

        return attrs
예제 #3
0
    def answer(self, request: Request, pk=None):
        homework: Homework = self.get_object()
        if homework.answer is None:
            raise NotFound('教师未提供答案!')

        now = timezone.now()
        if now <= homework.deadline:
            raise PermissionDenied()

        student_id = get_jwt_request_uid(request)
        if HomeworkSubmit.objects.filter(homework=homework, author_id=student_id).exists():
            response = StreamingHttpResponse(homework.answer.file, content_type=homework.answer.mime)
            response['Content-Disposition'] = f'attachment; filename={homework.answer.filename}'
            return response
        else:
            raise PermissionDenied()
예제 #4
0
 def get_queryset(self):
     teacher_id = get_jwt_request_uid(self.request)
     return HomeworkSubmit.objects.filter(
         homework__course__teacher__id=teacher_id)
예제 #5
0
def teacher_homeworks(request: Request):
    teacher_id = get_jwt_request_uid(request)
    return Homework.objects.filter(course__teacher__id=teacher_id)
예제 #6
0
 def get_queryset(self):
     student_id = get_jwt_request_uid(self.request)
     return Homework.objects.filter(course__students__id=student_id)