Django 에서 HTTP Request를 보낼 때에는 1) Form으로 보내는 방법과 2) Ajax 비동기로 보내는 방법이 있으며, CSRF Token을 요청에 포함할 것을 강요한다. CSRF Token을 통해 위조 공격에 대한 보안을 쉽게 작성 할 수 있다.
👉 방법 2가지
- 방법 1) Form 으로 데이터 보내는 방법
- 방법 2) Ajax로 보내는 방법
👉 GIthub 전체 코드 (링크)
👉 코드 - templates/index.html
meta 데이터에 csrf_token 을 추가 해주고, Ajax Header에 X-CSRFToken을 추가하여 보내준다.
<html>
<head>
<meta name="csrf_token" content="{{ csrf_token }}">
<!-- Jquery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<script>
function put_score() {
var csrftoken = document.querySelector("meta[name=csrf_token]").content
var score = document.getElementById("score").value
console.log(score)
$.ajax({ // 비동기 방식
type: "POST",
dataType: "JSON",
contentType: "application/json; charset=utf-8",
url: "/score/",
data: JSON.stringify({'score': score}),
headers: {"X-CSRFToken": csrftoken},
success: function (response) {
alert(response["msg"])
}
});
}
</script>
<body>
<div>
<label for="score">점수를 입력하세요</label><input type="text" id="score">
</div>
<button class="score-btn" onclick="put_score()">점수 제출</button>
</body>
</html>
👉 코드 - views.py, url.py
views.py
from django.shortcuts import render
from django.http import JsonResponse
import json
def score_func(request):
if request.method == 'GET':
return render(request, 'index.html')
elif request.method == 'POST':
score = int(json.loads(request.body)['score'])
print('받은 score 데이터', score)
if score >= 70:
msg = '합격'
else:
msg = '불합격'
return JsonResponse({'msg': msg})
urls.py
from django.urls import path
from .views import score_func
urlpatterns = [
path('score/', score_func)
]
'Python > Django' 카테고리의 다른 글
[Django] 무식한 라이브러리 분해 4 (settings.py) (0) | 2022.06.15 |
---|---|
[Django] CSRF Token + Form 방식 (0) | 2022.06.12 |
[Django, DB] Migration 초기화 방법 (+window 자동화 code) (0) | 2022.06.05 |
[Django] Message Framework (0) | 2022.06.04 |
[Django] Django .html .css 분리 방법 (by. Django Template) (0) | 2022.06.03 |