본문 바로가기

Programming/Django

[01. Django] 010. 데이터 요청/응답(Frontend ↔ Backend)

728x90

Frontend는 사용자가 직접 보고 상호작용하는 부분으로 사용자 인터페이스(UI)를 담당한다. 브라우저에서 실행되며 웹사이트나 애플리케이션의 외관과 동작을 설계한다.

 

반면 Backend는 사용자에게 보이지 않는 서버 측 작업을 담당하며, 데이터베이스, 서버, 애플리케이션 로직 등으로 구성된다. 요청에 따라 데이터를 처리하고 결과를 Frontend로 반환한다.

 

Django는 Backend 프레임워크 중 하나이다. Frontend(여기서는 웹사이트)에서 데이터를 요청하는 방법과 Django에서 응답하는 방법에 대해 알아보자.

 

웹사이트에서 다음과 같이 ajax를 통해 요청을 할 수 있다.

<head>
    <meta name="csrf-token" content="{{ csrf_token }}">
</head>

<script>
$.ajax(
      {
          type: 'POST',
          url: '{% url "stock:ipo" %}', 
          async: false,
          data: {},
          dataType: 'json',
          beforeSend: function(xhr, settings) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
          },
          complete: function() {
          },
          success: function(result) {
           
          },
          error: function(request, stauts, error) {

          }
       }
    )
</script>

 

여기서 csrftoken 을 같이 전송하는 것이 보인다. AJAX 요청에서 CSRF Token 삽입하는 이유는 서버 측에서 CSRF 공격을 방지하기 위해 요청의 정당성을 확인하기 때문이다.

 

CSRF 공격(Cross-Site Request Forgery, 사이트 간 요청 위조): 사용자가 신뢰하는 웹 애플리케이션에서 의도하지 않은 작업을 수행하도록 유도하는 보안 공격. 공격자는 사용자가 인증된 세션을 악용해 서버에서 사용자의 권한으로 실행 가능한 요청을 전송

 

stock 애플리케이션의 ipo의 url을 요청하였다. 이는 아래 파일로 요청이 들어간다.

 

stock 애플리케이션의 url.py

from django.urls import path
from . import views

app_name = 'stock'
urlpatterns = [
     path('ipo /', views.ipo, name='ipo'),  
]

 

name=’ipo’는 ‘stock/ipo/’ 경로로 반환된다. 이 주소로 들어가면서 실행되는 함수는 veiw의 ipo함수를 실행시킨다.

 

stock 애플리케이션의 view.py

def ipo(request):
 ...
 return JsonResponse({'ipo': ipo.to_dict(‘records’)})

 

응답된 데이터는 success의 함수로 반환된다.

728x90

'Programming > Django' 카테고리의 다른 글

[02. Django-allauth] 002. Google 로그인  (0) 2024.12.01
[02. Django-allauth] 001. 로그인 화면 추가  (0) 2024.12.01
[01. Django] 009. MTV  (0) 2024.11.26
[01. Django] 008. ORM  (0) 2024.08.07
[01. Django] 007. ADMIN  (0) 2024.08.07