DRF로 CRUD 만들기

김홍준·2021년 9월 3일
0
post-custom-banner

지난 시간엔 DRF 기초설정까지 해보았다.
이번시간엔 DRF를이용하여 단순한 코드로 crud가 모두 가능한 서버를 만들어보자

첫번째로 모델을 생성해주자


class Post(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_Post')
    photo = models.ImageField(upload_to='photos/%Y/%m/%d', default='photos/no_image.png')
    title = models.CharField(max_length=200)
    contents = models.TextField(null=True)
    create_time = models.DateTimeField(auto_now_add=True)
    edit_time = models.DateTimeField(auto_now=True)

그 후 지난 시간에 설명했던
직렬화 serializer를 해주기위해
serializer.py를 생성한다

from rest_framework import serializers
from .models import Post

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'

rest_framework 에서 serializers 를 import 해주고
.model에 있는 모델 또한 import 해준다

PostSerializer 라는 클래스를 생성한후 ModelSerializer를 상속한다
ModelSerializer 클래스를 사용하면 Model에 정의한 필드에 해당하는 값을 Serializer 할 수 있다.

model은 Post 사용하고,
fields에는 _._all.__
를 하여 모든 필드를 사용하겠다 !

여기까지 serializer 의 준비는 끝났고 view.py로 이동하자

from rest_framework import viewsets
from .serializers import PostSerializer
from .models import Post



class PostViewSet(viewsets.ModelViewSet):
	queryset = Post.objects.all()
    serializer_class = PostSerializer

* from rest_framework import viewsets -
로 viewset을 import 해준다

*from .serializers import PostSerializer -
.serializers 안에 있는 PostSerializer를 import해준다

*from .models import Post -
마찬가지로 .models 에 있는 Post를 import 해준다

class PostViewSet에서는
rest_framework에 있는
viewset 에서 ModelViewSet을 가져와 연동시켜준후

방금 만들었던
모델과 Serializer를
연동시켜줍니다
여기까지 view.py의 작업은 3줄로 끝이다.
(viewset의 장점)

.

다음은 post(appname)urls.py를 생성하자
그럼 이제
프로젝트안에 urls.py와
app 안에 urls.py 가 있다


from django.contrib import admin
from django.urls import path, include

urlpatterns = [
	path('admin/',admin.site.urls), #admin path 지정
    path('',include('post(appname).urls')),
# post(appname)/urls.py

from django.urls import include, path
from rest_framework import routers
from . import views # views.py import

router = routers.DefaultRouter() 
router.register('post',PostViewSet)

app_name = 'post'

urlpatterns = [
	path('',include(router.urls)),
]

프로젝트안에 있는 urls.py안에 post.urls을 include 해주고

post(appname) urls.py 안에는 코드를 위와 같이 짜준다

해석하자면
DefaultRouter 를 설정하고 post라는 주소를 아까 만들었던 PersonViewSet과 함께 등록하여 준다.
이러면 끝이다 이제 runserver 해주고 메인화면으로 가보면

저기서 저 post : 링크 를 누르게 되면


이와 같이 Post 모델안에 있는 모든 필드들이 나오게 된다
READ

아래에 form에서 데이터들을 입력하고 사진엔 가려졌지만 아래 post 버튼을 누르면 실제로 데이터들이 저장된다
CREATE

다음은 주소창에 post/1을 입력하게 되면

이와같이 상세 페이지가 나오고 PUT을통해 수정
UPDATE 할수있으며

우측 상단에 DELETE를 통해 삭제도 할수있다
DELETE

이와 같이 VIEWSET을 이용하여 CRUD를 한번에 할수있게 만들어보았다 다음시간은 VIEWSET을 사용하지 않고 APIVIEW를 사용해 게시판을 만들어보자 ! !

profile
김홍준입니다.
post-custom-banner

0개의 댓글