diff --git a/src/homework/migrations/0004_auto_20180125_1817.py b/src/homework/migrations/0004_auto_20180125_1817.py new file mode 100644 index 0000000000000000000000000000000000000000..9693462cf1df61aa81b3afd1810968e5b8ee444b --- /dev/null +++ b/src/homework/migrations/0004_auto_20180125_1817.py @@ -0,0 +1,22 @@ +# -*- 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/models.py b/src/homework/models.py index 0e94c27c497efe4e6dd8eed001356a8b5b0a27b5..87772df30ab9d524475153825894519cac862e17 100644 --- a/src/homework/models.py +++ b/src/homework/models.py @@ -51,7 +51,7 @@ 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) + ready = models.BooleanField(default=False, ) # if(Soulution.date <= Task.deadline) accepted = models.BooleanField(default=False, ) files = models.FileField( validators=[validators.FileExtensionValidator( diff --git a/src/homework/permissions.py b/src/homework/permissions.py index 7fab2c9d41a927e34b924fd725a531b90ebbc08d..ef5e09c427b4f93fac2592d1043a828f32d05c3d 100644 --- a/src/homework/permissions.py +++ b/src/homework/permissions.py @@ -29,6 +29,7 @@ class IsAuthenticatedOrReadOnly(BasePermission): class IsStaffOrReadOnlyForAuthenticated(BasePermission): + """ The request is authenticated as a staff, or is a read-only request for authenticated. """ diff --git a/src/kszkepzes/settings.py b/src/kszkepzes/settings.py index 5c53612e437be6058af830883882a6f066779668..db85da936cb6bb127570816efbae7d436ec7eaa1 100644 --- a/src/kszkepzes/settings.py +++ b/src/kszkepzes/settings.py @@ -44,6 +44,7 @@ INSTALLED_APPS = [ 'homework', 'account', 'stats', + 'news', ] MIDDLEWARE = [ diff --git a/src/kszkepzes/urls.py b/src/kszkepzes/urls.py index 96d979b966fa049cffc9662118bf1da143e16240..bb449b0a8cc3acc7ca1770f71328b680b9afd186 100644 --- a/src/kszkepzes/urls.py +++ b/src/kszkepzes/urls.py @@ -7,4 +7,5 @@ urlpatterns = [ url(r'^api/v1/homework/', include('homework.urls')), url(r'^api/v1/', include('stats.urls')), url(r'^api/v1/', include('account.urls')), + url(r'^api/v1/', include('news.urls')), ] diff --git a/src/news/__init__.py b/src/news/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/news/admin.py b/src/news/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..7f39d2fe12544dbc56abffe0abb6766e05fd843d --- /dev/null +++ b/src/news/admin.py @@ -0,0 +1,5 @@ +from django.contrib import admin +from .models import Article + +admin.site.register(Article) +# Register your models here. diff --git a/src/news/apps.py b/src/news/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..5a7b92d0f844e1bd89c73e7bba369b07298ae70a --- /dev/null +++ b/src/news/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class NewsConfig(AppConfig): + name = 'news' diff --git a/src/news/migrations/0001_initial.py b/src/news/migrations/0001_initial.py new file mode 100644 index 0000000000000000000000000000000000000000..3e3bf0cd6b30767f0b17a436e2c1eede7b9061a7 --- /dev/null +++ b/src/news/migrations/0001_initial.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2017-11-28 19:55 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('account', '0002_auto_20171114_2144'), + ] + + operations = [ + migrations.CreateModel( + name='Article', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=200)), + ('text', models.TextField()), + ('date', models.DateTimeField()), + ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='author', to='account.Profile')), + ], + ), + ] diff --git a/src/news/migrations/0002_auto_20171220_1852.py b/src/news/migrations/0002_auto_20171220_1852.py new file mode 100644 index 0000000000000000000000000000000000000000..82274a5e164ffb466661b8358d3839ee44f9f78a --- /dev/null +++ b/src/news/migrations/0002_auto_20171220_1852.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2017-12-20 17:52 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('news', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='article', + name='date', + field=models.DateTimeField(auto_now_add=True), + ), + ] diff --git a/src/news/migrations/__init__.py b/src/news/migrations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/news/models.py b/src/news/models.py new file mode 100644 index 0000000000000000000000000000000000000000..b30275b532f0d66b29072bbeae2f376938f6a0ec --- /dev/null +++ b/src/news/models.py @@ -0,0 +1,12 @@ +from django.db import models +from account.models import Profile + + +class Article(models.Model): + author = models.ForeignKey(Profile, related_name="author") + title = models.CharField(null=False, max_length=200) + text = models.TextField() + date = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return self.title diff --git a/src/news/permissions.py b/src/news/permissions.py new file mode 100644 index 0000000000000000000000000000000000000000..af200e51fd2bded246fdff376bc667109a87f632 --- /dev/null +++ b/src/news/permissions.py @@ -0,0 +1,11 @@ +from rest_framework.permissions import BasePermission +from rest_framework.permissions import SAFE_METHODS + + +class IsStaffOrReadOnlyForAuthenticated(BasePermission): + + def has_permission(self, request, view): + return (request.user.is_staff or + request.method in SAFE_METHODS and + request.user.is_authenticated + ) diff --git a/src/news/serializers.py b/src/news/serializers.py new file mode 100644 index 0000000000000000000000000000000000000000..ced9a8a2bce991d678e1cac1a7d3b8a83c0c4b20 --- /dev/null +++ b/src/news/serializers.py @@ -0,0 +1,8 @@ +from news.models import Article +from rest_framework import serializers + + +class ArticleListSerializer(serializers.ModelSerializer): + class Meta: + model = Article + fields = '__all__' diff --git a/src/news/tests.py b/src/news/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/news/urls.py b/src/news/urls.py new file mode 100644 index 0000000000000000000000000000000000000000..b08ebdd72a8c2303635cac63862bb8d0320e419e --- /dev/null +++ b/src/news/urls.py @@ -0,0 +1,9 @@ +from rest_framework import routers +from news import views + + +router = routers.DefaultRouter(trailing_slash=False) + +router.register(r'news', views.NewsViewSet) + +urlpatterns = router.urls diff --git a/src/news/views.py b/src/news/views.py new file mode 100644 index 0000000000000000000000000000000000000000..7ddf4881487ae34e32428022d7887665c88cf685 --- /dev/null +++ b/src/news/views.py @@ -0,0 +1,10 @@ +from news.permissions import IsStaffOrReadOnlyForAuthenticated +from rest_framework import viewsets +from news.models import Article +from news.serializers import ArticleListSerializer + + +class NewsViewSet(viewsets.ModelViewSet): + serializer_class = ArticleListSerializer + permission_classes = [IsStaffOrReadOnlyForAuthenticated] + queryset = Article.objects.all()