본문 바로가기
WEB/Django

Django 파이썬 웹 프로그래밍(3) Model과 View 그리고 Serializer

by Guardy 2020. 7. 26.
728x90

이번 글에서는 model을 생성하고 migration 작업을 통하여 admin 페이지에서 확인하는 작업까지 가질 것이다.

지금 제작하는 사이트는 커뮤니티 사이트이다.

우리가 만든 APP은 post이다.

post를 구성하는 요소에는 글, 댓글이 있을 것이다.

또한 글은 TimeModel이다. Time Model이란 시간정보를 담고 있다. 대부분의 글과 댓글은 작성시간이나 수정시간을 포함한다.

models.py를 다음과 같이 수정한다.

from django.db import models

class Post(TimeStampedModel):
    title = models.CharField(max_length=50, null=True)
    owner_nick = models.CharField(max_length=50, null=True)
    text = models.CharField(max_length=100)    
    created_at = models.DateTimeField(auto_now_add=False)
    def __str__(self):
        return '{} - {}'.format(self.title, self.owner_nick)

class Comment(TimeStampedModel):
    comment = models.TextField()
    owner_nick = models.CharField(max_length=50, null=True)
    post = models.ForeignKey(Post, null=True, related_name='comments',on_delete=models.CASCADE)
	created_at = models.DateTimeField(auto_now_add=False)
    def __str__(self):
        return self.comment

Post와 Comment를 정의했다.

글에는 제목과 작성자 본문 생성일이 있을 것이다.

댓글은 내용과 작성자 그리고 ForeignKey를 사용하여 글을 향하게 해주었다.


그 다음 우리는 views.py를 다음과 같이 수정해준다.

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from . import models, serializers
from rest_framework.permissions import AllowAny

class TitleSearch(APIView):

    def get(self, request, format=None):

        title_search = request.query_params.get('title_search', None)

        if title_search is not None:
            post = models.Post.objects.filter(title__contains=title_search)

            serializer = serializers.PostSerializer(post, many=True)

            return Response(data=serializer.data, status=status.HTTP_200_OK)

        else:

            return Response(status=status.HTTP_400_BAD_REQUEST)

우리는 Serializer를 통해 Response를 해줄 것이다.

Serializer는 쿼리셋과 인스턴스와 같은 데이터를 JSON, XML 같은 형태로 쉽게 렌더링 해준다.

view.py를 다음과 같이 수정했으면 저장 후 post 폴더에 serializers.py를 만들고 다음과 같이 입력한다.

 

from rest_framework import serializers
from . import models

class PostSerializer(serializers.ModelSerializer):
    comments = CommentSerializer(many=True)
    class Meta:
        model = models.Post
        fields = (
            'title',
            'owner_nick',
            'text',
            'created_at',
        )

class CommentSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Comment
        fields = (
            'comment',
            'owner_nick',
            'created_at'
        )

우리는 rest_framework를 사용하기 때문에 pip을 이용하여 설치한다. 설치 pip은 다음과 같다.

pip install djangorestframework

설치가 다 되었다면 장고에 djangorestframework를 사용할 것을 알려줘야하는데 setting의 Django_apps에 추가시킨다.

DJANGO_APPS = [

   ...

   rest_framework',

]

 

다음 글에서는 Postgresql을 연결시켜주도록 하겠다.

 

728x90