Search
castle

single/multi page application

image.png

  • Page Reloads : url 이동 없이 주기마다 변화(설정 시)
  • Django Rest framework : django single page application 지원 패키지
  • data 전송 : Json

Json

  • post(server) → json(client) : Serialize
  • post(server) ← json(client) : Deserialize

Serializer

json ↔ html

  • rest_framework의 serializers.ModelSerializerdata로 변환
    • <ModelSerializer instance>.data : json 변환
# rest_example\utils\serializers.py

from rest_framework import serializers
from blog.models import Post, Category

class CategorySeializet(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = ['name', 'slug']
        
class PostSeializet(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = ['title', 'category', 'author', 'create_date', 'updated_date', 'content', 'uploaded_image', 'uploaded_file']
        # fields = ['__all__']

# rest_example\views.py

from rest_framework.decorators import api_view 
from blog.models import Post
from .utils.serializers import PostSeializet
from rest_framework.status import HTTP_200_OK, HTTP_404_NOT_FOUND, HTTP_400_BAD_REQUEST

# Create your views here.
@api_view(['GET'])    
def helloAPI(request):
    return Response('hello world rest reponse')

@api_view(['GET', 'POST'])
def blogAPI(request):
    if request.method=='GET':
        posts = Post.objects.all()
        post_serializer = PostSeializer(posts, many=True)   # Serialize
        return Response(post_serializer.data, status=HTTP_200_OK)
    
    else :  # POST, json -> post로 변환
        de_serializer = PostSeializer(data=request.data)
        if de_serializer.is_valid():
            de_serializer.save()
            
            return Response(de_serializer.data, status=HTTP_201_CREATED)
        
        return Response(de_serializer, status=HTTP_400_BAD_REQUEST)

@api_view(['GET', 'DELETE', 'PUT', 'PATCH'])
def postAPI(request, pk):
    post = get_object_or_404(pk=pk)
    # post = Post.objects.get(pk=pk)
    
    if request.method=='GET':
        post_serializet = PostSeializer(post)   # Serialize
        return Response(post_serializet.data, status=HTTP_200_OK)
    elif request.method=='DELETE':
        post.delete()
        return Response('delete completed', status=HTTP_204_NO_CONTENT)
    else :
        seializer = PostSeializer(post, data=request.data)
        if seializer.is_valid():
            seializer.save()
            return Response(seializer.data, status=HTTP_200_OK)
            
    return Response(seializer.errors, status=HTTP_400_BAD_REQUEST)
...

image.png

Django Rest Framwork

decorator의 http response GET을 받아 사용

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

# Create your views here.
@api_view(['GET'])    
def helloAPI(request):
    return Response('hello world rest reponse')

image.png

  • form
    • type='post' : http request에 from data가 숨겨서 보내짐
    • type='get' : url에 붙어서 보여진 채로 보내짐
      • ex) localhost/name='aaa'
      • url이 더러워지는 원인
      • db 대신 사용하는 경우도…

image.png

image.png

  • 동일한 url에서 method 활용
    • /blog/create/(post) → /blog/(post, create method)
http type CRUD 기능 예시
GET read • 대부분 작업  
• http의 a 태그, url 접속 등 3번글 상세보기    
POST create • 포스트 작성 등  
• http의 <form type="post"> 3번글 삭제    
PUT update(all) Post를 수정했다면, 전체 항목을 다시 보내줌 3번글 수정
PATCH update(일부) Post를 수정할 때 title=’수정된 제목’ 등과 같이 일부 항목만 보냄 댓글 수정
DELETE delete   4번글 삭제

Rest Framework 관리 싸이트

image.png

left
right

C

Contents