1. 추가 설치

pip install djangorestframework

2. serializer 생성

from rest_framework import serializers
from .models import InterestCompany

class InterestCompanySerializer(serializers.ModelSerializer):
    class Meta:
        model = InterestCompany
        fields = "__all__" # Tuple 형식으로 나열해주어도 된다.

3. ViewSet 생성

  • CRUD를 1개의 View로 구현
    • [GET] api/{pk}/ : detail
    • [PUT] api/{pk}/ : 수정
    • [DELETE] api/{pk}/ : 삭제
    • [GET] api/ : 전체 리스트
    • [POST] api/ : 추가
  • permission_classes 등록이나 생성 시 save 처리 필요(perform_create)
from .serializer import InterestCompanySerializer
from rest_framework import viewsets

class InterestCompanyViewSet(viewsets.ModelViewSet):
    queryset = InterestCompany.objects.all()
    serializer_class = InterestCompanySerializer

4. URL 설정

  • 앱의 urls.py에 다음과 같이 작성
IC_list = InterestCompanyViewSet.as_view({
    'post': 'create',
    'get': 'list'
})

IC_detail = InterestCompanyViewSet.as_view({
    'get': 'retrieve',
    'put': 'update',
    'patch': 'partial_update',
    'delete': 'destroy'
})

path('interest/api/', IC_list, name="api-company-list"),
path('interest/api/<int:pk>/', IC_detail, name="api-company-detail"),

⇒ 보았을 때.. 해당 url로 접근하였을 때, post/get/put/patch/delete 등 접근 방식에 따라 취하는 행동 정의하는 거 같음.

5. 테스트

  • TemplateDoesNotExist(rest_framework/api.html) 에러 등장
    • 구글링 결과 .. INSTALLED_APPS에 등록을 안함.

image

  • Settings.py → INSTALLED_APPS → rest_framework 등록
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework'
    'Interest'
]

Ajax 설정


  • jquery load
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
  • Ajax Script 작성
<!--버튼-->
<a class="btn btn-success" id="success" onclick="clickevent(this);" name="{{forloop.counter0}}">관심 기업 등록</a>
<!-- 자기 자신 전달하기 위해선 this로 넘겨주면 된다. -->

function clickevent(self) {
        var idx = $(self).attr('name')
        var name = $('#name'+idx).attr('name')
        var title = $('#title'+idx).attr('name')
        console.log(idx+"//"+name+"//"+title);
        $.ajax({
            type: "POST",
            url: "{% url 'api-company-list' %}",
            data: {
                "company_name" : name,
                "intern_title" : title,
                "duration" : "1900-01-01T12:00"
            },
            dataType: "json",
            success: function(response) {
                window.location.reload()
            },
            error: function(request, status, error) {
                console.log("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+error);

            }
        });
    }
  • Django CSRF 에러시 해결법

    • 인증을 아직 도입하지 않았을 때, 필요 없는경우

      from rest_framework.authentication import SessionAuthentication, BasicAuthentication
      
      class CsrfExemptSessionAuthentication(SessionAuthentication):
        def enforce_csrf(self, request):
            return  # To not perform the csrf check previously happening
      
      #ModelViewSet 맨 윗줄에 추가
      authentication_classes = (CsrfExemptSessionAuthentication, BasicAuthentication)
    • https://stackoverflow.com/questions/30871033/django-rest-framework-remove-csrf

'프레임워크 > Django' 카테고리의 다른 글

[ Django ] MySQL 연동  (0) 2021.09.14
[ Django ] 게시판에 Summernote 에디터 적용  (0) 2021.09.07
[Django] Django 설치  (0) 2021.07.16
[Django] pyenv  (0) 2021.07.16
[Django] 환경 설정  (0) 2021.07.16

+ Recent posts