티스토리 뷰

apis/views.py

from django.shortcuts import render
from django.views import View
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse


@method_decorator(csrf_exempt, name = "dispatch")
class BaseView(View):
    @staticmethod
    def response(data = {}, message = '', status = 200):
        result = {
            'data' : data,
            'message' : message,
        }
        return JsonResponse(result, status = status)

 

api 개발할 때, json 형식의 정보를 주고받기 위한 BaseView이다.

이제 로그인이나 로그아웃, 회원가입 등 다양한 View 에서 이 BaseView를 상속받으면 JSON 형식의 정보를 주고받을 수 있다.

 

@csrf_exempt

- csrf( Cross Site Request Forgery ) 으로 웹 어플리케이션에서의 공격 중에 하나이다. 이를 막기 위해서는 django 템플릿의 html 파일에서 {% csrf_token %} 으로 CSRF 공격을 막는다. 그런데 만약 django 템플릿을 사용하지 않는다면 csrf  csrf token을 사용할 수 없다. 그래서 장고 템플릿을 사용하지 않는 상황에서 csrf 공격에 대해서 방어하기 위해 csrf 를 비활성화한다. 비활성화에는 두 가지 방법이 있는데 하나는 해당하는 view에서 @csrf_exempt 로 감싸는 것이고 하나는 프로젝트 settings.py에서 'django.middleware.csrf.CsrfViewMiddleware' 에 주석처리를 해서 프로젝트 전체 비활성화하는 것이다. 

 

@staticmethod

- 클래스에서 직접 접근할 수 있는 메소드

- 부모 클래스의 속성을 가져온다.

- staticmethod 와 같이 비교되는 @classmethod는 cls 인자를 사용해서 해당 클래스의 속성을 가져온다 

댓글