Merge branch 'fix_user_serializer' into 'develop'

Fix user serializer

See merge request skillbox/go.skillbox.ru!57
remotes/origin/pm_task_31703
Zolotarev Alexander 8 years ago
commit 943d89b3dc
  1. 89
      _utils/check_course_journal.py
  2. 21
      access/migrations/0090_auto_20170918_0811.py
  3. 5
      access/new_urls.py
  4. 68
      access/new_view.py
  5. 3
      access/serializers.py
  6. 22
      courses/migrations/0045_auto_20170810_0904.py
  7. 53
      courses/migrations/0045_auto_20170918_0811.py
  8. 24
      courses/migrations/0048_normalmap.py
  9. 25
      courses/migrations/0049_auto_20170907_1753.py
  10. 2
      courses/new_view.py
  11. 42
      finance/migrations/0071_auto_20170918_0811.py
  12. 25
      journals/migrations/0073_auto_20170918_0811.py
  13. 36
      library/migrations/0023_auto_20170918_0811.py
  14. 30
      management/migrations/0091_auto_20170918_0811.py
  15. 31
      practice/migrations/0021_auto_20170918_0811.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)

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.3 on 2017-09-18 08:11
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('access', '0089_auto_20170810_0904'),
]
operations = [
migrations.AlterField(
model_name='user',
name='delay_date',
field=models.DateTimeField(blank=True, default=django.utils.timezone.now, null=True, verbose_name='Задержка до. Не включая этот день.'),
),
]

@ -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()),
]

@ -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)
@staticmethod
def post(request):
if request.user.is_authenticated():
auth.logout(request)
return Response(status=204)

@ -6,4 +6,5 @@ class UserInitSerializer(serializers.ModelSerializer):
class Meta:
model = get_user_model()
fields = '__all__'
fields = ['id', 'email', 'phone', 'name',
'fname', 'oname', 'city', 'b_day']

@ -1,22 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.3 on 2017-08-10 09:04
from __future__ import unicode_literals
import datetime
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('courses', '0044_auto_20170621_1548'),
]
operations = [
migrations.AlterField(
model_name='lesson',
name='on_comment',
field=models.CharField(choices=[('N', 'Включены'), ('F', 'Отключены'), ('T', 'Подчиняется теме')], default='T', help_text='https://go.skillbox.ru/management/faq/37', max_length=1, verbose_name='Блок комментариев'),
),
]

@ -0,0 +1,53 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.3 on 2017-09-18 08:11
from __future__ import unicode_literals
import datetime
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('courses', '0044_auto_20170621_1548'),
]
operations = [
migrations.AlterField(
model_name='course',
name='mentors',
field=models.ManyToManyField(blank=True, related_name='course_mentors', to=settings.AUTH_USER_MODEL, verbose_name='Кураторы'),
),
migrations.AlterField(
model_name='diploma',
name='date_size',
field=models.IntegerField(null=True, verbose_name='Размер даты'),
),
migrations.AlterField(
model_name='diploma',
name='key',
field=models.IntegerField(verbose_name='Последний ключ'),
),
migrations.AlterField(
model_name='diploma',
name='key_size',
field=models.IntegerField(null=True, verbose_name='Размер ключа'),
),
migrations.AlterField(
model_name='diploma',
name='name_size',
field=models.IntegerField(null=True, verbose_name='Размер имени'),
),
migrations.AlterField(
model_name='lesson',
name='on_comment',
field=models.CharField(choices=[('N', 'Включены'), ('F', 'Отключены'), ('T', 'Подчиняется теме')], default='T', help_text='https://go.skillbox.ru/management/faq/37', max_length=1, verbose_name='Блок комментариев'),
),
migrations.AlterField(
model_name='materialdirection',
name='mentors',
field=models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name='Кураторы'),
),
]

@ -1,24 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.3 on 2017-09-04 13:56
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('courses', '0047_auto_20170904_1355'),
]
operations = [
migrations.CreateModel(
name='NormalMap',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('json_tree', models.TextField(default='')),
('course', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='courses.Course')),
],
),
]

@ -1,25 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.3 on 2017-09-07 17:53
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('courses', '0048_normalmap'),
]
operations = [
migrations.AddField(
model_name='normalmap',
name='independent_elements',
field=models.TextField(default=''),
),
migrations.AlterField(
model_name='course',
name='level',
field=models.CharField(choices=[('B', 'Базовый'), ('A', 'Продвинутый'), ('E', 'Экспертный'), ('B+A', 'Базовый + Продвинутый')], default='B', max_length=3, verbose_name='Уровень'),
),
]

@ -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)

@ -0,0 +1,42 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.3 on 2017-09-18 08:11
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('courses', '0045_auto_20170918_0811'),
('finance', '0070_auto_20170424_1638'),
]
operations = [
migrations.AlterField(
model_name='bill',
name='create_letters',
field=models.ManyToManyField(blank=True, editable=False, related_name='bill_create_letter', to='service.MailBox', verbose_name='Письма при создании'),
),
migrations.AlterField(
model_name='bill',
name='finish_letters',
field=models.ManyToManyField(blank=True, editable=False, related_name='bill_finish_letter', to='service.MailBox', verbose_name='Письма завершения'),
),
migrations.AlterField(
model_name='installment',
name='payments',
field=models.ManyToManyField(blank=True, related_name='bill_point', to='finance.Bill', verbose_name='Платежи'),
),
migrations.AlterField(
model_name='price',
name='included',
field=models.ManyToManyField(blank=True, help_text='Если задействовать эту функцию, стандартная схема подписок будет не активна', to='courses.CourseMap', verbose_name='Включены'),
),
migrations.AlterField(
model_name='requestalert',
name='requests',
field=models.ManyToManyField(blank=True, editable=False, to='finance.ServiceRequest', verbose_name='Количество заявок'),
),
]

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.3 on 2017-09-18 08:11
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('journals', '0072_auto_20170810_0904'),
]
operations = [
migrations.AlterField(
model_name='diplomaj',
name='key',
field=models.IntegerField(blank=True, null=True, verbose_name='Ключ'),
),
migrations.AlterField(
model_name='teacherj',
name='waiting',
field=models.ManyToManyField(blank=True, related_name='map_waiting', to='courses.CourseMap', verbose_name='Доп изучения'),
),
]

@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.3 on 2017-09-18 08:11
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('library', '0022_auto_20161101_1321'),
]
operations = [
migrations.AlterField(
model_name='article',
name='comments',
field=models.ManyToManyField(blank=True, editable=False, to='management.Comment', verbose_name='Комментарии'),
),
migrations.AlterField(
model_name='article',
name='favorite',
field=models.ManyToManyField(blank=True, editable=False, related_name='article_as_favorites', to=settings.AUTH_USER_MODEL, verbose_name='В фаворитах'),
),
migrations.AlterField(
model_name='article',
name='likes',
field=models.ManyToManyField(blank=True, editable=False, max_length=255, related_name='acticle_likes', to=settings.AUTH_USER_MODEL, verbose_name='Лайки'),
),
migrations.AlterField(
model_name='article',
name='tags',
field=models.ManyToManyField(blank=True, to='library.Tags', verbose_name='Теги'),
),
]

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.3 on 2017-09-18 08:11
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('management', '0090_auto_20161230_1643'),
]
operations = [
migrations.AlterField(
model_name='comment',
name='answers',
field=models.ManyToManyField(blank=True, editable=False, related_name='_comment_answers_+', to='management.Comment', verbose_name='Форумные ответы'),
),
migrations.AlterField(
model_name='comment',
name='replies',
field=models.ManyToManyField(blank=True, editable=False, related_name='_comment_replies_+', to='management.Comment', verbose_name='Ответы'),
),
migrations.AlterField(
model_name='faq',
name='comments',
field=models.ManyToManyField(blank=True, editable=False, to='management.Comment', verbose_name='Комментарии'),
),
]

@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.3 on 2017-09-18 08:11
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('practice', '0020_workshop_body'),
]
operations = [
migrations.AlterField(
model_name='datasheet',
name='users',
field=models.ManyToManyField(blank=True, editable=False, to=settings.AUTH_USER_MODEL, verbose_name='Пользователи'),
),
migrations.AlterField(
model_name='workshop',
name='tools',
field=models.ManyToManyField(blank=True, to='practice.WorkshopTools', verbose_name='Используемые инструменты'),
),
migrations.AlterField(
model_name='workshop',
name='users',
field=models.ManyToManyField(blank=True, editable=False, to=settings.AUTH_USER_MODEL, verbose_name='Пользователи'),
),
]
Loading…
Cancel
Save