Skip to content

Commit c0817a5

Browse files
committed
후원사 기본 CRUD 기능 작성
1 parent b1dff71 commit c0817a5

File tree

4 files changed

+64
-1
lines changed

4 files changed

+64
-1
lines changed

pyconweb2022/pyconweb2022/urls.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,15 @@
1616
from django.contrib import admin
1717
from django.urls import path, include
1818

19+
import sponsor.routers
20+
21+
1922
urlpatterns = [
2023
path('admin/', admin.site.urls),
2124

2225
# DRF
23-
path('api-auth/', include('rest_framework.urls'))
26+
path('api-auth/', include('rest_framework.urls')),
27+
28+
# App
29+
path('sponsor/', include(sponsor.routers.get_router().urls))
2430
]

pyconweb2022/sponsor/routers.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from rest_framework.routers import DefaultRouter
2+
3+
from sponsor.viewsets import *
4+
5+
6+
def get_router():
7+
router = DefaultRouter()
8+
router.register('', SponsorViewSet, basename='sponsor')
9+
10+
return router
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from rest_framework.serializers import ModelSerializer
2+
3+
from sponsor.models import Sponsor
4+
5+
6+
class SponsorSerializer(ModelSerializer):
7+
class Meta:
8+
model = Sponsor
9+
fields = '__all__'
10+
11+
12+
class SponsorListSerializer(ModelSerializer):
13+
class Meta:
14+
model = Sponsor
15+
fields = ['slug', 'name', 'level', 'desc', 'url', 'logo_image']

pyconweb2022/sponsor/viewsets.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from django.shortcuts import get_object_or_404
2+
from django.core.exceptions import PermissionDenied
3+
4+
from rest_framework.viewsets import ModelViewSet
5+
from rest_framework.permissions import IsAuthenticatedOrReadOnly, AllowAny
6+
from rest_framework.response import Response
7+
8+
from sponsor.serializers import SponsorSerializer, SponsorListSerializer
9+
from sponsor.models import Sponsor
10+
11+
12+
class SponsorViewSet(ModelViewSet):
13+
serializer_class = SponsorSerializer
14+
permission_classes = [IsAuthenticatedOrReadOnly] # 로그인된 사용자에게만 허용
15+
16+
def get_queryset(self):
17+
return Sponsor.objects.all()
18+
19+
def list(self, request, *args, **kwargs):
20+
queryset = Sponsor.objects.filter(accepted=True) # 모든 절차가 완료된 후원사만 리스팅
21+
serializer = SponsorListSerializer(queryset, many=True)
22+
return Response(serializer.data)
23+
24+
def retrieve(self, request, *args, **kwargs):
25+
pk = kwargs['pk']
26+
sponsor_data = get_object_or_404(Sponsor, pk=pk)
27+
28+
if sponsor_data.creator != request.user:
29+
raise PermissionDenied
30+
31+
serializer = SponsorSerializer(sponsor_data)
32+
return Response(serializer.data)

0 commit comments

Comments
 (0)