diff --git a/src/document/models.py b/src/document/models.py index 093434c91e2e82f277136f77bfee408269286501..f4103dc2c2a9c43cc467fa48c118ec73a5ee3ba9 100644 --- a/src/document/models.py +++ b/src/document/models.py @@ -10,7 +10,7 @@ from common.validators import FileSizeValidator def document_file_name(instance, filename): return '/'.join([ - 'document', + 'public/document', instance.solution.task.title, instance.uploaded_by.full_name, filename diff --git a/src/document/views.py b/src/document/views.py index 3744e3b7b5507edf625e88cc087ab2b2c8709c61..e2e5d3013688e06fc7666a83a23e49e7cac5e090 100644 --- a/src/document/views.py +++ b/src/document/views.py @@ -7,6 +7,7 @@ from django.http import HttpResponse, Http404 from rest_framework.decorators import action import os + class DocumentViewSet(viewsets.ModelViewSet): serializer_class = serializers.DocumentSerializer permission_classes = (permissions.IsStaffOrStudent, ) @@ -25,7 +26,10 @@ class DocumentViewSet(viewsets.ModelViewSet): profile_id = self.request.query_params.get('profileID', None) solution_id = self.request.query_params.get('solutionID', None) if profile_id is not None and solution_id is not None: - return queryset.filter(uploaded_by=profile_id, solution=solution_id) + return queryset.filter( + uploaded_by=profile_id, + solution=solution_id + ) if profile_id is not None: return queryset.filter(uploaded_by=profile_id) if solution_id is not None: @@ -38,19 +42,23 @@ class DocumentViewSet(viewsets.ModelViewSet): if solution_id is not None: return queryset.filter(solution=solution_id) return queryset - + def perform_create(self, serializer): kwargs = { 'uploaded_by': self.request.user.profile } - + serializer.save(**kwargs) @action(detail=True, methods=["get"]) def download(self, request, pk): document = self.get_object() with document.file.open() as fh: - response = HttpResponse(fh.read(), content_type="application/media") - response['Content-Disposition'] = 'inline; filename=' + os.path.basename(document.file.name) + response = HttpResponse( + fh.read(), + content_type="application/media" + ) + response['Content-Disposition'] = \ + 'inline; filename=' + os.path.basename(document.file.name) return response raise Http404 diff --git a/src/images/__init__.py b/src/images/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/images/admin.py b/src/images/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..e5459539b0c5b10562f9d6786e45011882017406 --- /dev/null +++ b/src/images/admin.py @@ -0,0 +1,5 @@ +from django.contrib import admin +from .models import Images + +admin.site.register(Images) +# Register your models here. diff --git a/src/images/apps.py b/src/images/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..a873d1a4e0f3523f2d9e297c7c895e710098e878 --- /dev/null +++ b/src/images/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class ImagesConfig(AppConfig): + name = 'images' diff --git a/src/images/migrations/0001_initial.py b/src/images/migrations/0001_initial.py new file mode 100644 index 0000000000000000000000000000000000000000..2319c1469c25d31d08611fb04d3e4a1c94aba949 --- /dev/null +++ b/src/images/migrations/0001_initial.py @@ -0,0 +1,21 @@ +# Generated by Django 2.2.4 on 2020-02-07 22:44 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Images', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('image', models.ImageField(blank=True, null=True, upload_to='images/')), + ], + ), + ] diff --git a/src/images/migrations/0002_auto_20200208_0254.py b/src/images/migrations/0002_auto_20200208_0254.py new file mode 100644 index 0000000000000000000000000000000000000000..045c2a144dfaf0952963f7841f53d9e740bc40e5 --- /dev/null +++ b/src/images/migrations/0002_auto_20200208_0254.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.4 on 2020-02-08 01:54 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('images', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='images', + name='image', + field=models.ImageField(blank=True, null=True, upload_to='public/images/'), + ), + ] diff --git a/src/images/migrations/__init__.py b/src/images/migrations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/images/models.py b/src/images/models.py new file mode 100644 index 0000000000000000000000000000000000000000..d515aeffce8e271338cd5bd37f2218736218b668 --- /dev/null +++ b/src/images/models.py @@ -0,0 +1,10 @@ +from django.db import models + + +class Images(models.Model): + image = models.ImageField( + upload_to='public/images/', null=True, blank=True + ) + + def __str__(self): + return self.id diff --git a/src/images/serializers.py b/src/images/serializers.py new file mode 100644 index 0000000000000000000000000000000000000000..e8985bd69031fa72efd4a017b1fb7f8deaf05932 --- /dev/null +++ b/src/images/serializers.py @@ -0,0 +1,9 @@ +from images.models import Images +from rest_framework import serializers + + +class ImagesSerializer(serializers.ModelSerializer): + + class Meta: + model = Images + fields = ('id', 'image') diff --git a/src/images/tests.py b/src/images/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/images/urls.py b/src/images/urls.py new file mode 100644 index 0000000000000000000000000000000000000000..b16c854441022549d60f67c06b69d15ac63cf1bd --- /dev/null +++ b/src/images/urls.py @@ -0,0 +1,8 @@ +from rest_framework import routers +from images import views + + +router = routers.DefaultRouter() +router.register(r'images', views.ImagesViewSet, base_name='images') + +urlpatterns = router.urls diff --git a/src/images/views.py b/src/images/views.py new file mode 100644 index 0000000000000000000000000000000000000000..162a8da6d35e5a9b0d77b37fd055ef8befc8570c --- /dev/null +++ b/src/images/views.py @@ -0,0 +1,14 @@ +from common.permissions import IsStaffOrStudent, \ + IsStaffOrReadOnlyForAuthenticated +from rest_framework import viewsets +from images.models import Images +from images.serializers import ImagesSerializer + + +class ImagesViewSet(viewsets.ModelViewSet): + serializer_class = ImagesSerializer + permission_classes = ( + IsStaffOrReadOnlyForAuthenticated, + IsStaffOrStudent, + ) + queryset = Images.objects.all() diff --git a/src/kszkepzes/settings/base.py b/src/kszkepzes/settings/base.py index 1e9a30157766d5704f4892538ec9128fd7672078..b040f8cf02b11324711e2a19c152aac3bf7be47e 100644 --- a/src/kszkepzes/settings/base.py +++ b/src/kszkepzes/settings/base.py @@ -49,6 +49,7 @@ INSTALLED_APPS = [ 'news', 'document', 'mentors', + 'images', 'groups', 'drf_yasg', ] @@ -160,4 +161,4 @@ STATIC_URL = '/staticfiles/' STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles") MEDIA_URL = "/mediafiles/" -MEDIA_ROOT = os.path.join(BASE_DIR, "mediafiles") +MEDIA_ROOT = os.path.join(BASE_DIR, "mediafiles") \ No newline at end of file diff --git a/src/kszkepzes/urls.py b/src/kszkepzes/urls.py index 0760d77eda95fb1a1ac2a54f9de0669a0ae0dfb4..c07e90ed5b4b50ce44b43077039adb5e8f38e0fd 100644 --- a/src/kszkepzes/urls.py +++ b/src/kszkepzes/urls.py @@ -37,6 +37,7 @@ urlpatterns = [ url(r'^api/v1/', include('document.urls')), url(r'^api/v1/', include('groups.urls')), url(r'^api/v1/', include('mentors.urls')), + url(r'^api/v1/', include('images.urls')), url(r'^api/v1/logout/$', auth_views.LogoutView.as_view(), name='logout'), ] diff --git a/src/mentors/views.py b/src/mentors/views.py index 28fdcc0bca19e2e4904b560ac9efa0e603689679..825eccbfa2b4515ddd8f6f7eb8a072fad193cbe5 100644 --- a/src/mentors/views.py +++ b/src/mentors/views.py @@ -1,4 +1,5 @@ -from common.permissions import IsStaffOrStudent +from common.permissions import IsStaffOrStudent, \ + IsStaffOrReadOnlyForAuthenticated from rest_framework import viewsets from mentors.models import Mentor from mentors.serializers import MentorSerializer @@ -6,7 +7,10 @@ from mentors.serializers import MentorSerializer class MentorsViewSet(viewsets.ModelViewSet): serializer_class = MentorSerializer - permission_classes = (IsStaffOrStudent,) + permission_classes = ( + IsStaffOrReadOnlyForAuthenticated, + IsStaffOrStudent, + ) queryset = Mentor.objects.all().order_by('name') def perform_create(self, serializer):