Skip to content

Commit 2ec0c21

Browse files
committed
merged with dev
2 parents 1b899f3 + 5a52e62 commit 2ec0c21

File tree

4 files changed

+32
-4
lines changed

4 files changed

+32
-4
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from rest_framework import permissions
2+
3+
4+
class IsAuthorPermission(permissions.BasePermission):
5+
6+
def has_permission(self, request, view):
7+
return request.user and request.user.is_authenticated
8+
9+
def has_object_permission(self, request, view, obj):
10+
if request.method in permissions.SAFE_METHODS:
11+
return True
12+
13+
return (
14+
request.user.is_superuser or
15+
request.user.has_perm("articles.change_article") or
16+
obj.author.pk == request.user.pk
17+
)

izpitnik/articles/api/serializers.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,5 @@ class ArticleSerializer(serializers.ModelSerializer):
2525

2626
class Meta:
2727
model = Article
28-
fields = ['id', 'title', 'content', 'image', 'saint', 'feast', 'holiday', 'author']
28+
fields = ['id', 'title', 'content', 'image', 'saint', 'feast', 'holiday', 'author']
29+
read_only_fields = ['author']

izpitnik/articles/api/views.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
from django.db.models import Q
22
from rest_framework import status
33
from rest_framework.exceptions import NotFound, ParseError
4-
from rest_framework.generics import ListAPIView
4+
from rest_framework.generics import ListAPIView, CreateAPIView
55
from rest_framework.permissions import IsAuthenticatedOrReadOnly
66
from rest_framework.response import Response
77
from rest_framework.status import HTTP_404_NOT_FOUND
88

9+
from izpitnik.articles.api.permissions import IsAuthorPermission
910
from izpitnik.articles.api.serializers import ArticleSerializer
1011
from izpitnik.articles.models import Article
1112
from izpitnik.orth_calendar.models import HolidayOccurrences
@@ -44,4 +45,12 @@ def get_object(self):
4445
def get_queryset(self):
4546

4647
queryset = self.get_object().all()
47-
return queryset
48+
return queryset
49+
50+
51+
class CreateArticleAPIView(CreateAPIView):
52+
serializer_class = ArticleSerializer
53+
permission_classes = [IsAuthorPermission]
54+
55+
def perform_create(self, serializer):
56+
serializer.save(author=self.request.user)

izpitnik/urls.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
from izpitnik import settings
2727
from izpitnik.accounts.api.views import CustomTokenObtainPairView, CookieTokenRefreshView, ApiLogoutView
28-
from izpitnik.articles.api.views import ArtilceAPIView
28+
from izpitnik.articles.api.views import ArtilceAPIView, CreateArticleAPIView
2929

3030
urlpatterns = [
3131
path('admin/', admin.site.urls),
@@ -35,6 +35,7 @@
3535
path('token/refresh/', CookieTokenRefreshView.as_view(), name='token_refresh'),
3636
path('token/logout/', ApiLogoutView.as_view(), name='logout-api'),
3737
path('articles/', ArtilceAPIView.as_view(), name='articles-api'),
38+
path('articles/create', CreateArticleAPIView.as_view(), name='articles-create-api'),
3839
path('schema/', SpectacularAPIView.as_view(), name='schema'),
3940
path('schema/redoc/', SpectacularRedocView.as_view(url_name='schema'), name='redoc'),
4041
])),

0 commit comments

Comments
 (0)