Merge branch 'file_upload' into 'dev'

File upload

See merge request !480
remotes/origin/dev
Andrey 8 years ago
commit fa5d8cdd9f
  1. 23
      courses/migrations/0007_lesson_materials.py
  2. 9
      courses/models.py
  3. 49
      courses/views.py
  4. 2
      finance/views.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2018-05-10 17:46
from __future__ import unicode_literals
import courses.models
import django.contrib.postgres.fields
from django.db import migrations, models
import lms.tools
class Migration(migrations.Migration):
dependencies = [
('courses', '0006_auto_20180323_1743'),
]
operations = [
migrations.AddField(
model_name='lesson',
name='materials',
field=django.contrib.postgres.fields.ArrayField(base_field=models.FileField(upload_to=courses.models.upload_material, verbose_name='Материал к уроку'), default=lms.tools.get_empty_list, size=None, verbose_name='Материалы к уроку'),
),
]

@ -25,6 +25,10 @@ COURSE_DIRECTION = (
)
def upload_material(instance, filename):
return '/'.join(['materials', str(instance.topic.course.token), str(instance.topic.id), str(instance.token), filename])
class Lesson(models.Model):
token = models.UUIDField(verbose_name="Токен", default=uuid.uuid4, editable=False)
key = models.UUIDField(
@ -33,6 +37,11 @@ class Lesson(models.Model):
title = models.CharField(verbose_name='Название', max_length=255)
description = models.TextField(verbose_name='Описание', blank=True, null=True)
video = models.TextField(verbose_name='Код видео', blank=True, null=True)
materials = ArrayField(
models.FileField(verbose_name="Материал к уроку", upload_to=upload_material),
verbose_name="Материалы к уроку",
default=get_empty_list,
)
material_tokens = ArrayField(
models.UUIDField(verbose_name="Токен материала", editable=False),
default=get_empty_list,

@ -1,9 +1,15 @@
import base64
import os
from jwt import DecodeError
from rest_framework.parsers import MultiPartParser
from courses.models import Course, Lesson, Topic
from rest_framework.renderers import JSONRenderer
from courses.models import Course, Lesson, Topic, upload_material
from rest_framework.renderers import JSONRenderer, BrowsableAPIRenderer
from rest_framework.response import Response
from rest_framework.views import APIView
from django.core.files.storage import default_storage
from django.core.files.base import ContentFile
from courses.serializers import CourseDetailSerializer, CourseTreeSerializer, LessonSerializer, TeacherLessonSerializer
import jwt
@ -87,18 +93,27 @@ class DeleteLessonView(APIView):
class UpdateLessonView(APIView):
renderer_classes = (JSONRenderer,)
renderer_classes = (JSONRenderer, BrowsableAPIRenderer)
parser_classes = (MultiPartParser,)
@staticmethod
def post(request):
lesson_token = request.JSON.get('token', None)
sort = request.JSON.get('sort', None)
topic_id = request.JSON.get('topic', None)
title = request.JSON.get('title', None)
description = request.JSON.get('description', None)
video = request.JSON.get('video', None)
free = request.JSON.get('free', None)
is_hm = request.JSON.get('is_hm', None)
def bool_transformer(val):
if val == 'false':
return False
if val == 'true':
return True
return val
def post(self, request):
lesson_token = request.POST.get('token', None)
sort = request.POST.get('sort', None)
topic_id = request.POST.get('topic', None)
title = request.POST.get('title', None)
description = request.POST.get('description', None)
video = request.POST.get('video', None)
materials_url = request.POST.get('materials_url', '')
free = self.bool_transformer(request.POST.get('free', None))
is_hm = self.bool_transformer(request.POST.get('is_hm', None))
if topic_id is None:
return Response("topic не передан", status=400)
@ -138,6 +153,16 @@ class UpdateLessonView(APIView):
lesson.sort = lesson.sort + 1
lesson.save()
l.sort = sort
materials = list(l.materials)
if not materials_url == '':
materials = base64.b64decode(materials_url).decode("utf-8").split(',')
for key in request.FILES:
f = request.FILES[key]
path = default_storage.save(upload_material(l, f.name), ContentFile(f.read()))
materials.append(path)
l.materials = materials
l.save()
return Response(CourseTreeSerializer(topic.course).data, status=200)

@ -357,7 +357,7 @@ def get_invoices(request):
file_name = file_name + "__from_%s" % date_from if date_from else file_name
file_name = file_name + "__to_%s" % date_to if date_to else file_name
invoices = Invoice.objects.filter(method="Y", status="F")
invoices = Invoice.objects.filter(status="F")
invoices = invoices.filter(yandex_pay__performed_datetime__lt=date_to) if date_to else invoices
invoices = invoices.filter(yandex_pay__performed_datetime__gte=date_from) if date_from else invoices

Loading…
Cancel
Save