diff --git a/environment.bat.example b/environment.bat.example index 7b9d14ba6a1b719ac0da4bfc8eb480ede78a5163..f13f7a2a823b8b7f193a892c8259961e6ef99cb5 100644 --- a/environment.bat.example +++ b/environment.bat.example @@ -1,3 +1,4 @@ setx SECRET_KEY <CHANGE_TO_SECRET> setx AUTHSCH_KEY <CHANGE_TO_CLIENT_ID> setx AUTHSCH_SECRET <CHANGE_TO_AUTHSCH_SECRET> +setx MEDIA_ROOT <DIRECTORY_OF_MEDIA> diff --git a/environment.ps1.example b/environment.ps1.example index 9b56e254a55ed75defe4a527c22a92f1950d503e..6fade2f1f0699c7d16be27095973a891506c3c98 100644 --- a/environment.ps1.example +++ b/environment.ps1.example @@ -1,3 +1,4 @@ $env:SECRET_KEY=<CHANGE_TO_SECRET> $env:AUTHSCH_KEY=<CHANGE_TO_CLIENT_ID> $env:AUTHSCH_SECRET=<CHANGE_TO_AUTHSCH_SECRET> +$env:MEDIA_ROOT=<DIRECTORY_OF_MEDIA> diff --git a/environment.sh.example b/environment.sh.example index 14c4e854dbdd5835050a4cc68d37c5bd0b59a28d..56aabd3c78e4a4a64423b525b16d391ced4d97eb 100644 --- a/environment.sh.example +++ b/environment.sh.example @@ -1,3 +1,4 @@ export SECRET_KEY=<CHANGE_TO_SECRET> export AUTHSCH_KEY=<CHANGE_TO_CLIENT_ID> export AUTHSCH_SECRET=<CHANGE_TO_AUTHSCH_SECRET> +export MEDIA_ROOT=<DIRECTORY_OF_MEDIA> diff --git a/src/common/serializers.py b/src/common/serializers.py new file mode 100644 index 0000000000000000000000000000000000000000..5e088623aa7d51eb2bdb7d73bec6d22a6e8777ce --- /dev/null +++ b/src/common/serializers.py @@ -0,0 +1,12 @@ +from rest_framework import compat + + +class CurrentUserProfileDefault(object): + def set_context(self, serializer_field): + self.user = serializer_field.context['request'].user + + def __call__(self): + return self.user.profile + + def __repr__(self): + return compat.unicode_to_repr('%s()' % self.__class__.__name__) diff --git a/src/common/validators.py b/src/common/validators.py new file mode 100644 index 0000000000000000000000000000000000000000..343f781994180b3c1cdaa3c35a6607d31cb527de --- /dev/null +++ b/src/common/validators.py @@ -0,0 +1,26 @@ +from django.core import exceptions +from django.utils.deconstruct import deconstructible +from django.utils.translation import ugettext_lazy as _ + + +@deconstructible +class FileSizeValidator(): + size_limit = 5242880 # 5MB - 5242880 + message = _('Too big file. %(size)d') + code = 'invalid' + + def __init__(self, size_limit=None, message=None, code=None): + if size_limit is not None: + self.size_limit = size_limit + if message is not None: + self.message = message + if code is not None: + self.code = code + + def __call__(self, file): + if file.size > self.size_limit: + raise exceptions.ValidationError( + self.message, + code=self.code, + params={'size': file.size} + ) diff --git a/src/homework/__init__.py b/src/homework/__init__.py old mode 100644 new mode 100755 diff --git a/src/homework/admin.py b/src/homework/admin.py old mode 100644 new mode 100755 diff --git a/src/homework/apps.py b/src/homework/apps.py old mode 100644 new mode 100755 diff --git a/src/homework/migrations/0001_initial.py b/src/homework/migrations/0001_initial.py old mode 100644 new mode 100755 index 57b9c1f5cea623dae04423523f427ff85e27bdc3..b92796bcb9ea8806d6a15480b2d9ccfe95609d1e --- a/src/homework/migrations/0001_initial.py +++ b/src/homework/migrations/0001_initial.py @@ -1,12 +1,9 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.5 on 2018-01-24 12:09 -from __future__ import unicode_literals +# Generated by Django 2.0.1 on 2018-04-05 08:33 -from django.conf import settings +import common.validators import django.core.validators from django.db import migrations, models import django.db.models.deletion -import homework.models class Migration(migrations.Migration): @@ -14,7 +11,7 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('account', '0017_auto_20180205_2004'), ] operations = [ @@ -22,35 +19,29 @@ class Migration(migrations.Migration): name='Solution', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date', models.DateTimeField(auto_now_add=True)), - ('ready', models.BooleanField()), - ('files', models.FileField(blank=True, upload_to='', validators=[django.core.validators.FileExtensionValidator('image/png', 'image/jpeg', 'application/zip')])), - ('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='Student', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('homework', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='homework.Solution')), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('ready', models.BooleanField(default=False)), + ('accepted', models.BooleanField(default=False)), + ('files', models.FileField(upload_to='', validators=[django.core.validators.FileExtensionValidator(['png', 'jpeg', 'jpg', 'zip']), common.validators.FileSizeValidator(size_limit=52428800)])), + ('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='student_solution', to='account.Profile')), ], ), migrations.CreateModel( name='Task', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), ('title', models.CharField(max_length=150)), - ('date', models.DateTimeField(auto_now_add=True)), - ('deadline', models.DateTimeField(validators=[homework.models.validate_deadline])), ('text', models.TextField()), - ('files', models.FileField(blank=True, upload_to='', validators=[django.core.validators.FileExtensionValidator('image/png', 'image/jpeg', 'application/zip')])), - ('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('deadline', models.DateTimeField()), + ('created_by', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='account.Profile')), ], ), migrations.AddField( model_name='solution', name='task', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='homework.Task'), + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='task_solution', to='homework.Task'), ), ] diff --git a/src/homework/migrations/0002_auto_20180124_1453.py b/src/homework/migrations/0002_auto_20180124_1453.py deleted file mode 100644 index 597c83e833b380d48452111a0e35eafaaa16969a..0000000000000000000000000000000000000000 --- a/src/homework/migrations/0002_auto_20180124_1453.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.5 on 2018-01-24 13:53 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('homework', '0001_initial'), - ] - - operations = [ - migrations.RemoveField( - model_name='student', - name='homework', - ), - migrations.RemoveField( - model_name='student', - name='user', - ), - migrations.AddField( - model_name='solution', - name='accepted', - field=models.BooleanField(default=False), - ), - migrations.AlterField( - model_name='solution', - name='created_by', - field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), - ), - migrations.AlterField( - model_name='solution', - name='ready', - field=models.BooleanField(default=False), - ), - migrations.AlterField( - model_name='solution', - name='task', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='task_solution', to='homework.Task'), - ), - migrations.AlterField( - model_name='task', - name='created_by', - field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), - ), - migrations.DeleteModel( - name='Student', - ), - ] diff --git a/src/homework/migrations/0002_auto_20180411_0047.py b/src/homework/migrations/0002_auto_20180411_0047.py new file mode 100644 index 0000000000000000000000000000000000000000..cafe25c08698315b551c3d0d0eaa5430eb0ef5d5 --- /dev/null +++ b/src/homework/migrations/0002_auto_20180411_0047.py @@ -0,0 +1,22 @@ +# Generated by Django 2.0.1 on 2018-04-10 22:47 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('homework', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='solution', + name='ready', + ), + migrations.AlterField( + model_name='solution', + name='accepted', + field=models.BooleanField(), + ), + ] diff --git a/src/homework/migrations/0003_auto_20180124_1818.py b/src/homework/migrations/0003_auto_20180124_1818.py deleted file mode 100644 index 1fcd873a015a4518dc233d5a7071279bd0fe7165..0000000000000000000000000000000000000000 --- a/src/homework/migrations/0003_auto_20180124_1818.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.5 on 2018-01-24 17:18 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('homework', '0002_auto_20180124_1453'), - ] - - operations = [ - migrations.AlterField( - model_name='task', - name='created_by', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/src/homework/migrations/0004_auto_20180125_1817.py b/src/homework/migrations/0004_auto_20180125_1817.py deleted file mode 100644 index 9693462cf1df61aa81b3afd1810968e5b8ee444b..0000000000000000000000000000000000000000 --- a/src/homework/migrations/0004_auto_20180125_1817.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.5 on 2018-01-25 17:17 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('homework', '0003_auto_20180124_1818'), - ] - - operations = [ - migrations.AlterField( - model_name='solution', - name='created_by', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/src/homework/migrations/0004_auto_20180204_1209.py b/src/homework/migrations/0004_auto_20180204_1209.py deleted file mode 100644 index 4a5edae2bf510af877be158eaf1179a88561f9ec..0000000000000000000000000000000000000000 --- a/src/homework/migrations/0004_auto_20180204_1209.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.5 on 2018-02-04 11:09 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('homework', '0003_auto_20180124_1818'), - ] - - operations = [ - migrations.AlterField( - model_name='solution', - name='created_by', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/src/homework/migrations/0005_auto_20180126_0135.py b/src/homework/migrations/0005_auto_20180126_0135.py deleted file mode 100644 index 0155be9f4f3740b5aca421362a0b57b429fcd737..0000000000000000000000000000000000000000 --- a/src/homework/migrations/0005_auto_20180126_0135.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.0.1 on 2018-01-26 00:35 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('homework', '0004_auto_20180125_1817'), - ] - - operations = [ - migrations.AlterField( - model_name='task', - name='created_by', - field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/src/homework/migrations/0005_auto_20180204_1525.py b/src/homework/migrations/0005_auto_20180204_1525.py deleted file mode 100644 index 33d8e8b819be271f58c67f9fa6ef5fc023e30be0..0000000000000000000000000000000000000000 --- a/src/homework/migrations/0005_auto_20180204_1525.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.5 on 2018-02-04 14:25 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('homework', '0004_auto_20180204_1209'), - ] - - operations = [ - migrations.RenameField( - model_name='solution', - old_name='date', - new_name='alma', - ), - ] diff --git a/src/homework/migrations/0006_auto_20180204_1601.py b/src/homework/migrations/0006_auto_20180204_1601.py deleted file mode 100644 index f6bdbc058c2d151c208b0b03cddadb7cd7855e51..0000000000000000000000000000000000000000 --- a/src/homework/migrations/0006_auto_20180204_1601.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.5 on 2018-02-04 15:01 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('homework', '0005_auto_20180204_1525'), - ] - - operations = [ - migrations.RenameField( - model_name='solution', - old_name='alma', - new_name='date', - ), - ] diff --git a/src/homework/migrations/0007_merge_20180205_2021.py b/src/homework/migrations/0007_merge_20180205_2021.py deleted file mode 100644 index f48190e1e65e41a1bdd45dbd665ec1e08ea4181e..0000000000000000000000000000000000000000 --- a/src/homework/migrations/0007_merge_20180205_2021.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 2.0.1 on 2018-02-05 19:21 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('homework', '0005_auto_20180126_0135'), - ('homework', '0006_auto_20180204_1601'), - ] - - operations = [ - ] diff --git a/src/homework/migrations/__init__.py b/src/homework/migrations/__init__.py old mode 100644 new mode 100755 diff --git a/src/homework/models.py b/src/homework/models.py old mode 100644 new mode 100755 index 5a8b2026a6deb3909a5129278e4695b58bcf47ba..a62333df3d2905702b87c01d835bf099e47b49fd --- a/src/homework/models.py +++ b/src/homework/models.py @@ -1,69 +1,40 @@ from django.db import models -from django.contrib.auth.models import User -from django.core.exceptions import ValidationError -from django.utils.translation import ugettext_lazy as _ -from django.utils import timezone from django.core import validators -# from . import myfields +from common.validators import FileSizeValidator +from account.models import Profile -# 5MB - 5242880 -__MAX_UPLOAD_SIZE = 5242880 - - -def validate_deadline(date): - if date <= timezone.now(): - raise ValidationError(_('Date must be greater than now'), code='invalid') - - -# def validate_file_size(file): -# if file._size > __MAX_UPLOAD_SIZE: -# raise ValidationError(_('Please keep filesize under' + __MAX_UPLOAD_SIZE)) class Task(models.Model): + created_by = models.ForeignKey(Profile, on_delete=models.DO_NOTHING) + created_at = models.DateTimeField(auto_now_add=True, editable=False) + updated_at = models.DateTimeField(auto_now=True, editable=False) title = models.CharField(max_length=150) - date = models.DateTimeField(auto_now_add=True, editable=False) - deadline = models.DateTimeField(validators=[validate_deadline]) text = models.TextField() - created_by = models.ForeignKey(User, on_delete=models.DO_NOTHING) - files = models.FileField( - validators=[validators.FileExtensionValidator( - 'image/png', - 'image/jpeg', - 'application/zip', - )], - blank=True, - ) - # files = myfields.RestrictedFileField( - # content_types=['image/png', 'image/jpeg', 'application/zip'], - # max_upload_size=MAX_UPLOAD_SIZE, - # blank=True, - # null=True, - # ) -# solution_file = models.BooleanField() -# -# def clean(self): -# if self.deadline <= timezone.now(): -# raise ValidationError(_('Invalid date'), code='invalid') + deadline = models.DateTimeField() + # dokumentum kezeles + + def __str__(self): + return self.title class Solution(models.Model): task = models.ForeignKey(Task, related_name='task_solution', on_delete=models.CASCADE) - # student = models.ForeignKey(account.models.Profile, related_name='student_solution', on_delete=models.CASCADE) - date = models.DateTimeField(auto_now_add=True, editable=False) - ready = models.BooleanField(default=False) # if(Soulution.date <= Task.deadline) - accepted = models.BooleanField(default=False) + created_by = models.ForeignKey(Profile, related_name='student_solution', on_delete=models.CASCADE) + created_at = models.DateTimeField(auto_now_add=True, editable=False) + updated_at = models.DateTimeField(auto_now=True, editable=False) + accepted = models.BooleanField() files = models.FileField( - validators=[validators.FileExtensionValidator( - 'image/png', - 'image/jpeg', - 'application/zip', - )], - blank=True, + validators=[ + validators.FileExtensionValidator([ + 'png', + 'jpeg', + 'jpg', + 'zip', + ]), + FileSizeValidator(size_limit=52428800), # 52428800 - 50MiB + ], ) - created_by = models.ForeignKey(User, on_delete=models.CASCADE) - # files = myfields.RestrictedFileField( - # content_types=['image/png', 'image/jpeg', 'application/zip'], - # max_upload_size=MAX_UPLOAD_SIZE, - # blank=True, - # ) + + def __str__(self): + return "[{}] {}".format(self.created_at, self.created_by.full_name) diff --git a/src/homework/myfields.py b/src/homework/myfields.py deleted file mode 100644 index c343daa73b1aa8407ad21dfdab6f997d51c2a021..0000000000000000000000000000000000000000 --- a/src/homework/myfields.py +++ /dev/null @@ -1,41 +0,0 @@ -from django import forms -from django.template.defaultfilters import filesizeformat -from django.utils.translation import ugettext_lazy as _ -from django.core.exceptions import ValidationError - - -class RestrictedFileField(forms.FileField): - """ - Same as FileField, but you can specify: - * content_types - list containing allowed content_types. Example: ['application/pdf', 'image/jpeg'] - * max_upload_size - a number indicating the maximum file size allowed for upload. - 2.5MB - 2621440 - 5MB - 5242880 - 10MB - 10485760 - 20MB - 20971520 - 50MB - 5242880 - 100MB - 104857600 - 250MB - 214958080 - 500MB - 429916160 -""" - - def __init__(self, *args, **kwargs): - self.content_types = kwargs.pop("content_types") - self.max_upload_size = kwargs.pop("max_upload_size") - super().__init__(*args, **kwargs) - - def clean(self, data, initial=None): - file = super().clean(data, initial) - - try: - content_type = file.content_type - if content_type in self.content_types: - if file._size > self.max_upload_size: - raise ValidationError(_('Please keep filesize under %s. Current filesize %s') % ( - filesizeformat(self.max_upload_size), filesizeformat(file._size))) - else: - raise ValidationError(_('Filetype not supported.')) - except AttributeError: - pass - - return data diff --git a/src/homework/serializers.py b/src/homework/serializers.py old mode 100644 new mode 100755 index 4ce68b43063f2a4b52158fbc2e78a074333653b8..f7d7c81b2d31467a445b1d9a547808b85c9bc6f4 --- a/src/homework/serializers.py +++ b/src/homework/serializers.py @@ -1,27 +1,39 @@ from rest_framework import serializers +from django.utils import timezone + +from common.serializers import CurrentUserProfileDefault from . import models class TaskSerializer(serializers.ModelSerializer): + created_by = serializers.HiddenField(default=CurrentUserProfileDefault()) + class Meta: model = models.Task - read_only_fields = ('created_by', 'date') - extra_kwargs = {'created_by': {'default': serializers.CurrentUserDefault()}} + read_only_fields = ('created_by', 'created_at', 'updated_at') fields = '__all__' + def validate(self, data): + if timezone.now() >= data['deadline']: + raise serializers.ValidationError('Please, enter appropriate deadline.') + return data + class SolutionSerializer(serializers.ModelSerializer): + created_at = serializers.DateTimeField(read_only=True) + updated_at = serializers.DateTimeField(read_only=True) + created_by = serializers.HiddenField(default=CurrentUserProfileDefault()) + class Meta: model = models.Solution - read_only_fields = ('created_by', 'date' 'ready') - extra_kwargs = {'created_by': {'default': serializers.CurrentUserDefault()}} - fields = ('task', 'date', 'accepted', 'files', 'created_by') - - def validate(self, attrs): - task = attrs['task'] - date = attrs['date'] + read_only_fields = ('created_by', 'created_at', 'updated_at', 'ready') + fields = ('task', 'created_at', 'updated_at', 'accepted', 'files', 'created_by') - if task.deadline < date: - raise serializers.ValidationError("You cannot submit homework after the deadline") + def validate(self, data): + if timezone.now() > data['task'].deadline: + raise serializers.ValidationError('You late.') + return data - return attrs + def create(self, validated_data): + validated_data['accepted'] = False + return self.Meta.model.objects.create(**validated_data) diff --git a/src/homework/tests.py b/src/homework/tests.py old mode 100644 new mode 100755 diff --git a/src/homework/urls.py b/src/homework/urls.py old mode 100644 new mode 100755 diff --git a/src/homework/views.py b/src/homework/views.py old mode 100644 new mode 100755 index 498f447b82695465d92ca2ae49157028cca8ed8d..41f1638a5484fe74cf9f471ea353da89cb9ee7c8 --- a/src/homework/views.py +++ b/src/homework/views.py @@ -1,13 +1,9 @@ from rest_framework import viewsets -from rest_framework.response import Response -from rest_framework import status -from rest_framework.decorators import list_route -from django.http import Http404 -from django.shortcuts import get_object_or_404 +from common import permissions +from rest_framework.permissions import IsAuthenticated from . import serializers from . import models -from common import permissions class TasksViewSet(viewsets.ModelViewSet): @@ -18,27 +14,14 @@ class TasksViewSet(viewsets.ModelViewSet): class SolutionsViewSet(viewsets.ModelViewSet): serializer_class = serializers.SolutionSerializer - queryset = models.Solution.objects.all() - permission_classes = (permissions.IsStaffOrReadOnlyForAuthenticated, ) - - def create(self, request, *args, **kwargs): - serializer = self.get_serializer(data=request.data) - serializer.is_valid(raise_exception=True) - # serializer.validated_data['accepted'] = False - # task_id = serializer.validated_data.get('task') - # date = serializer.validated_data['date'] - # task = get_object_or_404(models.Task, pk=task_id) - # if task_id.deadline < date: - # return Http404("Deadline") - headers = self.get_success_headers(serializer.data) - return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) + permission_classes = (IsAuthenticated, ) def get_queryset(self): user = self.request.user + queryset = models.Solution.objects.filter(created_by=user) if user.has_perm(permissions.IsStaffUser): - return models.Solution.objects.all() - - @list_route(methods=['get']) - def me(self, request): - serializer = self.serializer_class(request.user.profile) #request ? - return Response(serializer.data) \ No newline at end of file + queryset = models.Solution.objects.all() + user_id = self.request.query_params.get('userID', None) + if user_id is not None: + queryset = queryset.filter(created_by=user_id) + return queryset diff --git a/src/kszkepzes/settings/base.py b/src/kszkepzes/settings/base.py index e19f0ee83398dac0da425ea3298ec6a593a1ab9d..277106b310ad176aa7268075d2b0a6e099ff2a22 100644 --- a/src/kszkepzes/settings/base.py +++ b/src/kszkepzes/settings/base.py @@ -153,3 +153,6 @@ USE_TZ = True # https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL = '/django-static/' + +MEDIA_ROOT = os.getenv('MEDIA_ROOT', '/tmp') +MEDIA_URL = '/media/' diff --git a/src/kszkepzes/urls.py b/src/kszkepzes/urls.py index b696e393918a0e73867aae8dd1712ff633e77b4a..3b249d5dcce89907087234475c1d014328c81e3b 100644 --- a/src/kszkepzes/urls.py +++ b/src/kszkepzes/urls.py @@ -1,4 +1,6 @@ from django.conf.urls import url, include +from django.conf.urls.static import static +from django.conf import settings from django.contrib import admin from django.contrib.auth import views as auth_views @@ -9,6 +11,8 @@ urlpatterns = [ url(r'^api/v1/', include('stats.urls')), url(r'^api/v1/', include('account.urls')), url(r'^api/v1/', include('news.urls')), - url(r'^api/v1/logout/$', auth_views.LogoutView.as_view(), name='logout'), ] + +if settings.DEBUG: + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)