1. 추가 설치
pip install djangorestframework
2. serializer 생성
- queryset, 모델 → json, xml 쉽게 변환
- serializers.py 생성
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에 등록을 안함.
- 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 |