카테고리 없음

Django 글 작성 로직

rlarudals 2024. 11. 22. 01:28

models.py

from django.db import models
from tests.models import User

# Create your models here.
class Blog(models.Model):
    # author 는 tests앱에서 역참조에서 가져오기
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blogs', null=True) # 유저 정보 가져오기
    title = models.CharField(max_length=40) # 제목
    content = models.TextField() # 내용
    created_at = models.DateTimeField(auto_now_add=True) # 작성한 날짜
    updated_at = models.DateTimeField(auto_now=True) # 업데이트한 날짜

    def __str__(self):
        return self.title

serializers.py

from rest_framework import serializers
from blog.models import Blog

class BlogSerializer(serializers.ModelSerializer):
        author = serializers.ReadOnlyField(source="author.username") # 글 작성자 nickname
        class Meta:
            model = Blog
            fields = ['title', 'content', 'created_at', 'updated_at', 'author']
            # 필요한 필드만 포함시키려면
            # fields = ['field 명']

            # 특정 필드를 제외시키려면
            # exclude = ['field 명']

urls.py

from django.urls import path
from . import views
# from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
from .views import BlogAPIView

app_name = 'blog'

urlpatterns = [
    path("write/", BlogAPIView.as_view(), name="blogwrite"), # 블로그 글 작성ㅇ
]

views.py

from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response

# Create your views here.
# 블로그 작성 기능
class BlogAPIView(CreateAPIView):
    serializer_class = BlogSerializer
    permission_classes = [IsAuthenticated]  # 로그인한 사용자만 접근 가능
   
    def post(self, request):
        # 요청 데이터로 Serializer 초기화
        serializer = BlogSerializer(data=request.data)
        # 유효성 검사
        if serializer.is_valid(raise_exception=True):
            # 작성자 정보 추가 및 저장
            serializer.save(author=request.user)
            return Response(serializer.data, status=201)
       
        # 유효성 검사 실패 시 에러 반환
        return Response(serializer.errors, status=400)