코딩일지/TIL: Today I Learned

20221024 TIL

야언 2022. 10. 24. 20:12

오늘의 배운 것

  • 장고 심화 - 1, 2주차

 

장고 심화

 

  • HTTP와 웹의 동작 방식
    • 웹브라우저의 흐름
    • 프로토콜 계층
    • URI
    • HTTP - 클라이언트 서버 구조 / 무상태 프로토콜(stateless)
    • 데이터 전송 - HTML Form / HTML API
    • HTTP 상태 코드
    • HTTP 헤더
    • 쿠키, 캐시

 

 

  • Postman

https://www.postman.com/

 

Postman API Platform | Sign Up for Free

Postman is an API platform for building and using APIs. Postman simplifies each step of the API lifecycle and streamlines collaboration so you can create better APIs—faster.

www.postman.com

웹 개발을 하면서 API에 요청을 하고 결과를 확인하고 싶을 때,

브라우저에 직접 API URL을 작성해가며 결과를 확인할 수 있지만, 번거롭고 GET 방식 요청등 간단한 정도만 수행할 수 있다.

포스트맨을 이용해 대상 URL에 요청할 메소드를 지정할 수 있고, 결과 확인도 빠르고 간편해 API를 테스트하기 좋다

 

 

 

 

 

 

  • DRF ( Django Rest Framework)

CURD를 단순 함수가 아니라 클래스를 사용함으로써 여러 추가 기능들 보강 가능, ex) 클래스 상속 등

 

기존의 방식대로 만들어보자면

@api_view(['GET', 'POST'])
def articleAPI(request):
    if request.method == 'GET':
        articles = Article.objects.all()
        serializer = ArticleSerializer(articles, many=True)
        return Response(serializer.data)
    elif request.method == 'POST':
        serializer = ArticleSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            print(serializer.errors)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

 

이 함수를 클래스화 하면

 

class ArticleList(APIView):
    def get(self, request, format=None):
        articles = Article.objects.all()
        serializer = ArticleSerializer(articles, many=True)
        return Response(serializer.data)
    
    @swagger_auto_schema(request_body=ArticleSerializer)
    def post(self, request, format=None):
        serializer = ArticleSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            print(serializer.errors)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

* swagger : 스웨거는 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형 도구 생태계의 지원을 받는 오픈 소스 소프트웨어 프레임워크이다. - 위키백과

 

 

* 시리얼라이저(serializer) - 데이터를 json화

models.py

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    def __str__(self):
        return str(self.title)

serializers.py

from rest_framework import serializers
from articles.models import Article

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = "__all__"
{
"title":"타이틀",
"content":"내용",
"created_at":"생성시간",
"updated_at":"수정시간"
}

 

 

 

지금까지 배워왔던 장고의 기능을 기반으로 이제 DRF를 사용해 CRUD를 json형태로 구현해 보았다.

 

이미 두번의 프로젝트 내에서 장고 프레임워크의 문제 - ex) 인스타그램 클론코딩 프로젝트 중 post뿐만 아니라 좋아요, 댓글 기능을 사용할 때에도 서버에 request를 보낼때마다 redirect, render로 response해 무조건 새로고침이 들어감 - 에 대해 인지하고 있었고,

또한 이미지 업로드, 모달 창 열기 기능 등에 js를 이용하면서 겉핥기로 배웠던 기능들에 대해 본격적으로 배우게 될 것 같다. 이제 진짜로 웹페이지를 만드는데 쓰는 코드들을 아직 직접 써보는건 아니고 살짝 엿보는 느낌? 빠릿빠릿하게 흡수해봅시다..