diff --git a/_utils/check_course_journal.py b/_utils/check_course_journal.py index a82cc7b..04c60f2 100644 --- a/_utils/check_course_journal.py +++ b/_utils/check_course_journal.py @@ -2,10 +2,10 @@ import os import django -import sys +import sys import os -from datetime import datetime +from datetime import datetime sys.path.append("/var/www/skillbox") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") @@ -16,48 +16,49 @@ from courses.models import Course from finance.models import Price from journals.models import TeacherJ, check_journal + def check_course_journal(course_id): - print('===========\nКурс: %s\n==============\n' % Course.objects.get(id=course_id).title) - - print('Начало проверки журнала курса') - global_start = start = datetime.now() - course = Course.objects.get(id=course_id) - course.build_map() - finish = datetime.now() - print('Конец проверки журнала курса. Длительность: %s мсек\n' % (finish-start).microseconds) - - print('Начало проверки услуг') - start = datetime.now() - all = Price.objects.filter(by_time=0, post_fire=0, course__id=course_id).count() - print('Количество услуг на проверку: %s' % all) - for i in Price.objects.filter(by_time=0, post_fire=0, course__id=course_id): - i.check_points() - finish = datetime.now() - print('Конец проверки услуг. Длительность: %s мсек\n' % (finish-start).microseconds) - - print('Начало очистки двойных журналов') - start = datetime.now() - os.system('python clean_twice_course_journals.py %s' % course_id) - finish = datetime.now() - print('Конец очистки двойных журналов. Длительность: %s\n' % (finish-start).microseconds) - - print('Начало проверки журналов') - all = TeacherJ.objects.filter(progress__gt=0, course__id=course_id).count() - print('Количество журналов на проверку: %s' % all) - for i in TeacherJ.objects.filter(progress__gt=0, course__id=course_id).order_by('-id'): - check_journal(i, from_console=True) - print('Конец проверки журналов. Длительность: %s сек\n' % (finish-start).microseconds) - - print('Начало открытия уроков курса') - start = datetime.now() - os.system('python open_course_lesson.py %s' % course_id) - finish = datetime.now() - print('Конец открытия уроков курса. Длительность: %s\n' % (finish-start).microseconds) - - global_finish = datetime.now() - print('==============================\nДлительность: %s сек' % (global_finish - global_start).seconds) + print('===========\nКурс: %s\n==============\n' % Course.objects.get(id=course_id).title) -if __name__ == "__main__": - course_id = sys.argv[1] - check_course_journal(course_id) + print('Начало проверки журнала курса') + global_start = start = datetime.now() + course = Course.objects.get(id=course_id) + course.build_map() + finish = datetime.now() + print('Конец проверки журнала курса. Длительность: %s мсек\n' % (finish - start).microseconds) + + print('Начало проверки услуг') + start = datetime.now() + all = Price.objects.filter(by_time=0, post_fire=0, course__id=course_id).count() + print('Количество услуг на проверку: %s' % all) + for i in Price.objects.filter(by_time=0, post_fire=0, course__id=course_id): + i.check_points() + finish = datetime.now() + print('Конец проверки услуг. Длительность: %s мсек\n' % (finish - start).microseconds) + + print('Начало очистки двойных журналов') + start = datetime.now() + os.system('python clean_twice_course_journals.py %s' % course_id) + finish = datetime.now() + print('Конец очистки двойных журналов. Длительность: %s\n' % (finish - start).microseconds) + + print('Начало проверки журналов') + all = TeacherJ.objects.filter(progress__gt=0, course__id=course_id).count() + print('Количество журналов на проверку: %s' % all) + for i in TeacherJ.objects.filter(progress__gt=0, course__id=course_id).order_by('-id'): + check_journal(i, from_console=True) + print('Конец проверки журналов. Длительность: %s сек\n' % (finish - start).microseconds) + print('Начало открытия уроков курса') + start = datetime.now() + os.system('python open_course_lesson.py %s' % course_id) + finish = datetime.now() + print('Конец открытия уроков курса. Длительность: %s\n' % (finish - start).microseconds) + + global_finish = datetime.now() + print('==============================\nДлительность: %s сек' % (global_finish - global_start).seconds) + + +if __name__ == "__main__": + course_id = sys.argv[1] + check_course_journal(course_id) diff --git a/access/new_urls.py b/access/new_urls.py index bf13a00..dea2ecb 100644 --- a/access/new_urls.py +++ b/access/new_urls.py @@ -3,5 +3,10 @@ from access import new_view as views urlpatterns = [ url(r'teachers/$', views.TeacherListView.as_view()), + url(r'info/$', views.InfoUserView.as_view()), url(r'check/$', views.CheckUserView.as_view()), + url(r'registration/$', views.RegistrationView.as_view()), + url(r'change_password/$', views.ChangePasswordView.as_view()), + url(r'login/$', views.LoginView.as_view()), + url(r'logout/$', views.LogoutView.as_view()), ] \ No newline at end of file diff --git a/access/new_view.py b/access/new_view.py index 8dd0b67..80c05aa 100644 --- a/access/new_view.py +++ b/access/new_view.py @@ -5,6 +5,7 @@ from rest_framework.renderers import JSONRenderer from rest_framework.response import Response from access.serializers import UserInitSerializer +from courses.models import Course class TeacherListView(APIView): @@ -12,11 +13,18 @@ class TeacherListView(APIView): status_code = 200 def get(self, request): - return Response([teacher.full_name() for teacher in get_user_model().objects.filter( + kwargs = dict( in_role='T', is_active=True, reg_status=4, - )], self.status_code) + ) + res = [] + course_id = request.GET.get('course_id', 0) + if course_id: + kwargs['course_teachers'] = Course.objects.get(id=course_id) + for teacher in get_user_model().objects.filter(**kwargs): + res.append(teacher.full_name()) + return Response(res, self.status_code) class CheckUserView(APIView): @@ -29,20 +37,64 @@ class CheckUserView(APIView): return Response(False, status=self.status_code) -class LoginView(APIView): +class InfoUserView(APIView): renderer_classes = (JSONRenderer,) status_code = 200 def get(self, request): + if request.user.is_authenticated(): + return Response(UserInitSerializer(request.user).data, status=self.status_code) + return Response('anonymous', status=self.status_code) + + +class RegistrationView(APIView): + renderer_classes = (JSONRenderer,) + + @staticmethod + def post(request): + try: + user = get_user_model().objects.get(email=request.JSON['email'].lower()) + except get_user_model().DoesNotExist: + user = get_user_model().objects.create_user( + email=request.JSON['email'].lower(), + ) + user.set_password(request.JSON['password']) + user.reg_status = '2' + user.save() + return Response(UserInitSerializer(user).data, status=200) + + +class ChangePasswordView(APIView): + renderer_classes = (JSONRenderer,) + + @staticmethod + def post(request): + if request.user.is_authenticated and not request.user.check_password(request.JSON['old_password']): + return Response("Неверный пароль", status=404) + request.user.set_password(request.JSON['new_password']) + request.user.save() + return Response("Пароль был изменён", status=200) + + +class LoginView(APIView): + renderer_classes = (JSONRenderer,) + + @staticmethod + def post(request): if not request.user.is_authenticated(): user = auth.authenticate(email=request.JSON.get('email'), password=request.JSON.get('password')) - return Response(UserInitSerializer(user).data, status=self.status_code) - return Response(status=403) + try: + auth.login(request, user) + except AttributeError: + return Response("Неверный пароль", status=404) + return Response(UserInitSerializer(request.user).data, status=200) class LogoutView(APIView): renderer_classes = (JSONRenderer,) - status_code = 204 - def get(self, request): - return Response(False, status=self.status_code) \ No newline at end of file + @staticmethod + def post(request): + if request.user.is_authenticated(): + auth.logout(request) + return Response(status=204) \ No newline at end of file diff --git a/access/serializers.py b/access/serializers.py index 72c81e7..ecf2693 100644 --- a/access/serializers.py +++ b/access/serializers.py @@ -6,4 +6,5 @@ class UserInitSerializer(serializers.ModelSerializer): class Meta: model = get_user_model() - fields = '__all__' \ No newline at end of file + fields = ['id', 'email', 'phone', 'name', + 'fname', 'oname', 'city', 'b_day'] \ No newline at end of file diff --git a/courses/new_view.py b/courses/new_view.py index ba42044..b331557 100644 --- a/courses/new_view.py +++ b/courses/new_view.py @@ -65,7 +65,7 @@ class CourseListView(APIView): if course.public: course_serialize = CourseListSerializer(course).data course_serialize['is_mine'] = False - if Bill.objects.filter(service__course=course, user=request.user, status='F').exists(): + if request.user.is_authenticated() and Bill.objects.filter(service__course=course, user=request.user, status='F').exists(): course_serialize['is_mine'] = True res.append(course_serialize) diff --git a/oferta.pdf b/oferta.pdf index 5aab4e1..00a26f1 100644 Binary files a/oferta.pdf and b/oferta.pdf differ diff --git a/templates/contacts.html b/templates/contacts.html index 141fbd8..b4d7229 100755 --- a/templates/contacts.html +++ b/templates/contacts.html @@ -23,7 +23,7 @@
Юридическая информация
-

ИП Коропов Игорь Валентинович
ИНН 504793474705
ОГРНИП 314504727900026

+

ООО «СКИЛБОКС»
ИНН 9701078611
ОГРН 1177746566140

Контакты