Django

DRF와 Postman (GET, PUT, DELETE, POST)

zhelddustmq 2024. 8. 29. 14:18

DRF 설치 및 설정

pip install djangorestframework

settings.py

INSTALLED_APPS = [
		...
		'rest_framework',
		...
]

→ freeze !

 

일단 사용해보기

articles/urls.py

from django.urls import path
from . import views

app_name = "articles"
urlpatterns = [
    path("html/", views.article_list_html, name="article_list_html"),
    path("json-01/", views.json_01, name="json_01"),
    path("json-02/", views.json_02, name="json_02"),
    path("json-drf/", views.json_drf, name="json_drf"),
]

serializers.py (생성)

from rest_framework import serializers
from .models import Article


class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = "__all__"

views.py

from rest_framework.decorators import api_view
from rest_framework.response import Response
from .serializers import ArticleSerializer

@api_view(["GET"])
def json_drf(request):
    articles = Article.objects.all()
    serializer = ArticleSerializer(articles, many=True)
    return Response(serializer.data)

API는 소프트웨어끼리 소통하는 방법

⇒ 직접 파이썬 프로그램을 만들어서 콜해보기

import requests

url = "http://127.0.0.1:8000/api/v1/articles/json-drf"
response = requests.get(url)

print(response)
print(response.json())

Postman: 개발자가 API를 디자인, 테스트, 문서화, 공유를 할 수 있도록 도와주는 소프트웨어.

-> API 테스트, 환경 관리, 협업 등을 위한 기능을 제공하여 보다 효율적으로 API를 개발하고 테스트 할 수 있게 도와줌.

 

0. 가입 후 데스크톱 앱 설치

 

1. My workspace

2. 새로운 collection을 생성

3. request를 생성하고 정의

4. 보낼 주소를 입력하고 보내기

  • 이렇게 하나하나의 API를 작성하고 테스트하면서 개발
  • Workspace를 팀원끼리 공유하여 협업이 가능
    ⇒ 최대 3명까지 무료로 이용가능하고, 그 이상은 유료

 

-----------------------------------------------------------------------------------------------------------------------------

만들었던 py파일과 template폴더 지우고

 

urls.py

# namespace나 별명 참조하는것 등 다 없어도 됨.
from django.urls import path
from . import views
app_name = "articles"
urlpatterns = [
    path("", views.article_list, name="article_list"),
    path("<int:pk>/", views.article_detail, name="article_detail"),
    
]

 

serializers.py(생성)

from rest_framework import serializers
from .models import Article


class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = "__all__"

 

models.py

from django.db import models


class Article(models.Model):
    title = models.CharField(max_length=120)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

 

views.py

from rest_framework.decorators import api_view # 함수형 api작성시 필요
from rest_framework.response import Response
from rest_framework import status # response 상태들
from .models import Article
from .serializers import ArticleSerializer 
from django.shortcuts import get_object_or_404


@api_view(["GET", "POST"])
def article_list(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(raise_exception=True): # return Response(serializer.errors, status=400)을 대신함
            serializer.save()
            # 201은 created
            return Response(serializer.data, status=status.HTTP_201_CREATED)


@api_view(["GET", "PUT", "DELETE"])
def article_detail(request, pk):
    if request.method == "GET":
        article = get_object_or_404(Article, pk=pk)
        serializer = ArticleSerializer(article)
        return Response(serializer.data)
    elif request.method == "PUT":
        article = get_object_or_404(Article, pk=pk)
        # 앞에 article을 넣어야 instance처럼 동작
        serializer = ArticleSerializer(article, data=request.data, partial=True) # partial은 부분 필드만 고치고 싶을때
        if serializer.is_valid(raise_exception=True):
            serializer.save()
            return Response(serializer.data)
    elif request.method == "DELETE":
        article = get_object_or_404(Article, pk=pk)
        article.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)  # 204는 삭제

'Django' 카테고리의 다른 글

Relationship과 DRF(with. particular seed)  (0) 2024.08.29
DRF CBV  (0) 2024.08.29
Django Seed(Response와 Serializer)  (0) 2024.08.29
장고 TemplateSyntaxError  (0) 2024.08.28
백엔드와 Django DRF, RESTful API  (0) 2024.08.23