Merge branch 'dev' into 'master'

Dev

See merge request !91
master
Andrey 8 years ago
commit aaf0d79b08
  1. 25
      courses/serializers.py
  2. 1
      courses/urls.py
  3. 16
      courses/views.py
  4. 20
      progress/migrations/0007_progresslesson_last_update.py
  5. 1
      progress/models.py
  6. 2
      progress/serializers.py
  7. 5
      progress/views.py

@ -29,6 +29,31 @@ class LessonSerializer(MiniLessonSerializer):
exclude = ('id', 'topic', 'key')
class TeacherLessonSerializer(MiniLessonSerializer):
topic_sort = serializers.SerializerMethodField()
topic_title = serializers.SerializerMethodField()
course_title = serializers.SerializerMethodField()
class Meta:
model = Lesson
fields = ('topic_sort', 'description', 'title', 'course_title', 'token', 'topic_title')
@staticmethod
def get_topic_sort(self):
for topic_idx, topic in enumerate(self.topic.course.topic_set.all()):
if topic == self.topic:
return topic_idx + 1
return None
@staticmethod
def get_topic_title(self):
return self.topic.title
@staticmethod
def get_course_title(self):
return self.topic.course.title
class CourseInitSerializer(serializers.ModelSerializer):
class Meta:

@ -4,6 +4,7 @@ from courses import views as views
urlpatterns = [
url(r'vertex/(?P<token>.+)/$', views.LessonDetail.as_view()),
url(r'lesson/teacher/(?P<token>.+)/$', views.LessonInfoView.as_view()),
url(r'tree/(?P<slug>.+)/$', views.TreeView.as_view()),
url(r'detail/(?P<slug>.+)/$', views.CourseDetailView.as_view()),
url(r'^$', views.CourseListView.as_view()),

@ -4,7 +4,7 @@ from rest_framework.response import Response
from rest_framework.views import APIView
from django.contrib.auth import get_user_model
from courses.serializers import CourseDetailSerializer, CourseTreeSerializer, LessonSerializer
from courses.serializers import CourseDetailSerializer, CourseTreeSerializer, LessonSerializer, TeacherLessonSerializer
from progress.models import ProgressLesson
@ -45,6 +45,20 @@ class CourseDetailView(APIView):
return Response(CourseDetailSerializer(Course.objects.get(slug=slug)).data, self.status_code)
class LessonInfoView(APIView):
renderer_classes = (JSONRenderer,)
status_code = 200
def get(self, request, token):
try:
lesson = Lesson.objects.get(token=token)
except Lesson.DoesNotExist:
return Response('Урок не найден', status=404)
if request.user.is_authenticated and request.user.out_key in lesson.topic.course.teacher_tokens:
return Response(TeacherLessonSerializer(lesson).data, self.status_code)
return Response("Пользователь не является преподователем по курсу", status=403)
class LessonDetail(APIView):
renderer_classes = (JSONRenderer,)

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-02-25 18:28
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('progress', '0006_auto_20180219_1323'),
]
operations = [
migrations.AddField(
model_name='progresslesson',
name='last_update',
field=models.DateTimeField(auto_now=True, verbose_name='Дата последнего изменения'),
),
]

@ -57,6 +57,7 @@ class ProgressLesson(models.Model):
finish_date = models.DateTimeField(verbose_name='Дата зачтения задания', blank=True, null=True)
start_date = models.DateTimeField(verbose_name='Дата начала прохождения задания', auto_now_add=True)
status = models.CharField(choices=STATUSES, default=STATUSES.start, max_length=20)
last_update = models.DateTimeField(verbose_name='Дата последнего изменения', auto_now=True)
comment_tokens = ArrayField(models.UUIDField(verbose_name="Токен комента", editable=False), default=get_empty_list)
def __str__(self):

@ -39,7 +39,7 @@ class ProgressLessonSerializer(serializers.ModelSerializer):
class Meta:
model = ProgressLesson
exclude = ('id', 'progress', 'checker')
exclude = ('progress', 'checker')
@staticmethod
def get_teacher(self):

@ -23,6 +23,8 @@ class StudentWorkView(APIView):
@staticmethod
def get(request, teacher_token):
client_status = request.GET.get('status', 'in_progress')
client_max_body = request.GET.get('max_body', 20)
last_id = request.GET.get('last_id', 0)
server_status = Q(status='fail') if \
client_status == 'not_done' else Q(status='wait') if client_status == 'in_progress' else Q(status='done')
if request.user.is_authenticated() and request.user.groups.filter(name__in=['teachers', 'admin']).exists():
@ -31,7 +33,8 @@ class StudentWorkView(APIView):
~Q(progress__user__out_key=teacher_token),
server_status,
checker__out_key=teacher_token,
)
id__gt=last_id
)[:client_max_body]
return Response([ProgressLessonSerializer(i).data for i in progress_lessons], status=200)
except ValidationError:
return Response("Bad request", status=400)

Loading…
Cancel
Save