728x90
반응형
Forumapp DRF
DRF 의 핵심은 serializing 을 아주 간단하게 하는 라이브러리들을 쓸 수 있다는 점이다.
- 모델을 정의해서 models.Models 로 상속 받아서 사용
- rest_framework 를 설치해서 serializers 에 적용
- serializer.ModelSerializer 를 상속받아 ModelSerializer 생성
- view 에서 해당 시리얼라이저를 사용하여 클래스를 만들고 ModelViewSet 을 상속
- 마지막으로 urls 에 router 로 연결해줌
- model 설정 → models.Model 상속
- serializer 설정 → request 와 response 를 프레임 워크로 바로 바로 JSON 형식으로 바꿔서 보내고 받을 수 있게 해주는 설정
- views 설정 → rest_framework 라이브러리에서 viewsets 을 상속받아서 사용하기 떄문에 queryset 과 시리얼라이저 클래스를 설정해줌
- urls 설정 → 기존에 사용하던 path 방식이 아닌 route 방식으로 컨트롤 해줌
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Topic(models.Model):
# postgres 를 사용할 예정이기 때문에 -> postgres 에서는 Text 와 Char 를 같게 취급
# 그래서 스트링을 다루는 곳에서는 Text 사용 - 공식문서
name = models.TextField(max_length=100, unique=True)
is_private = models.BooleanField(default=False)
owner = models.ForeignKey(User, on_delete=models.PROTECT)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
class Post(models.Model):
topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
title = models.TextField(max_length=200)
content = models.TextField()
owner = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
from rest_framework import serializers
from .models import Topic, Post
class TopicSerializer(serializers.ModelSerializer):
# 모델을 시리얼라이져로 가져올 때는 Meta 를 정의
class Meta: # 어떤 모델을, 어떤 필드를 가져올지
model = Topic
fields = "__all__"
# 유저가 수정하면 안되는 부분들을 정리
read_only_fields =(
"id",
"created_at",
"updated_at",
)
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = "__all__"
read_only_fields =(
"id",
"created_at",
"updated_at",
)
from rest_framework import viewsets
from .models import Topic, Post
from .serializers import TopicSerializer, PostSerializer
# 모델 뷰셋 사용
class TopicViewSet(viewsets.ModelViewSet):
# 어떤 모델 오브젝트를 쓸꺼니?
# all() -> create ~ list ~ 전부 알아서 작성됨
queryset = Topic.objects.all()
# 어떤 시리얼라이저 쓸꺼니?
serializer_class = TopicSerializer
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
from rest_framework.routers import DefaultRouter
from . import views
router = DefaultRouter()
router.register('topic', views.TopicViewSet, basename='topic')
router.register('post', views.PostViewSet, basename='post')
project - urls.py
from django.contrib import admin
from django.urls import path, include
# from blog.urls import urlpatterns as blog_urls
from blog.urls import router as blog_router
from forumapp.urls import router as forum_router
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include(blog_router.urls)),
[](<https://www.notion.so/2023-08-09-8bef24b5985b424ea1ffa37617601436?pvs=21>) path('forum/', include(forum_router.urls)),
path('api-auth/', include('rest_framework.urls')),
]
728x90
반응형
'Dev. > Django & DRF' 카테고리의 다른 글
[Cloud] Django: Code develop for TEST2 (0) | 2023.08.31 |
---|---|
Django : DRF 적용하기3 - Spectacular (0) | 2023.08.16 |
Django : DRF 적용하기 (0) | 2023.08.15 |
Django : DRF - quick start (0) | 2023.08.15 |
Django : 시작하기 (0) | 2023.08.09 |
댓글