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)
