※ class-based view를 사용해야 하는 이유!!
- 객체 지향코드를 사용하여 재사용 가능한 형태로 만들 수 있음
- GET, POST 등 처리를 분기(if) 처리가 아닌 함수로 처리할 수 있음
※ csrf란?
- cross-site request forgery(사이트 간 요청 위조)의 줄임말로 해킹공격 중 하나이다.
- django 프로젝트는 기본적으로 settings.py에 csrf 공격 방지 미들웨어가 실행중에 있다.
MIDDLEWARE = [
'django.middleware.csrf.CsrfViewMiddleware',
]
- API서버의 경우 해당 기능이 필요없기(다른 인증방식 사용) 때문에 해당 라인을 주석 처리하면 된다
- 장고로 프론트와 백엔드 모두 수행하는 경우 백엔드 파트에서 csrf_exempt(csrf 제외)처리를 하면 된다.
- 즉, 개발 프로젝트에 따라 미들웨어를 끄거나 백엔드에서 예외처리를 하면된다.
1. 함수(function)로 views 만들기
더보기
- views.py
@csrf_exempt
def testAPI(request):
if request.method == "GET":
pass
- urls.py
urlpatterns = [
path('/', views.testAPI),
]
2. class view 만들기
- 잘못된 함수 데코레이션 views.py
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
class TestAPI(View):
def get(self, request):
pass
# AttributeError: 'function' object has no attribute 'as_view' 에러발생!!
- 클래스 기반 데코레이션 views.py
from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
@method_decorator(csrf_exempt, name='dispatch')
class TestAPI(View):
def get(self, request):
pass
- urls.py
from . import views
urlpatterns = [
path('/', views.TestAPI.as_view())
]
출처:
https://docs.djangoproject.com/ko/3.2/ref/csrf/#django.views.decorators.csrf.csrf_exempt
https://www.stackhawk.com/blog/django-csrf-protection-guide/
'Python > Django' 카테고리의 다른 글
[Django] django에서 데이터 받기 (0) | 2022.09.13 |
---|---|
[Django] db connection, raw query... (0) | 2022.03.21 |
[Django] django.core serializers VS drf serializers 차이점 (0) | 2022.03.08 |
[Django] Django 소개 (0) | 2022.02.08 |