inanJeong
이난's 프로그래밍 지식 사이트
inanJeong
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • 회고록 및 개발일기 (4)
    • Advanced (0)
    • Python (18)
      • 파이썬 기초 (0)
      • 파이썬스럽게 개발하기 (6)
      • Django (5)
      • 고성능 파이썬 (0)
      • matplotlib (3)
      • Error (4)
    • 기타 (61)
      • Shell Script (2)
      • 라즈베리파이 (5)
      • 티스토리 꾸미기 (2)
      • 알고리즘 (2)
      • 소프트웨어 개발론 (0)
      • JIRA(프로젝트 관리 도구) (1)
      • git (1)
      • Swagger (1)
      • docker (2)
      • web_server (2)
      • MySQL (2)
      • front_end (3)
      • javascripts(typescript + ES.. (5)
      • ServerSideApplication (1)
      • Data Engineering (5)
      • flutter (2)
      • JSP (10)
      • Spring boot (5)
      • React (3)
      • elasticSearch (1)
      • AWS (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
inanJeong

이난's 프로그래밍 지식 사이트

[django] class-based view, csrf
Python/Django

[django] class-based view, csrf

2022. 3. 14. 15:43

※ 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

 

Cross Site Request Forgery protection | Django 문서 | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

https://www.stackhawk.com/blog/django-csrf-protection-guide/

 

Django CSRF Protection Guide: Examples and How to Enable

In this post, we’ll talk about what CSRF is and how it works. Then, we’ll walk you through examples in Django and how to prevent them.

www.stackhawk.com

 

'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
    'Python/Django' 카테고리의 다른 글
    • [Django] django에서 데이터 받기
    • [Django] db connection, raw query...
    • [Django] django.core serializers VS drf serializers 차이점
    • [Django] Django 소개
    inanJeong
    inanJeong
    저작권 문제시 이메일 발송 부탁드립니다.(해당 게시글 바로 내리겠습니다.) ghjklla007@naver.com

    티스토리툴바