Python/Django

[Django] CSRF Token + Form 방식

yubi5050 2022. 6. 12. 23:05

Django 에서 HTTP Request를 보낼 때에는 1) Form으로 보내는 방법2) Ajax 비동기로 보내는 방법이 있으며, CSRF Token을 요청에 포함할 것을 강요한다. CSRF Token을 통해 위조 공격에 대한 보안을 쉽게 작성 할 수 있다.

 

👉  방법 2가지

 

👉 GIthub 전체 코드 (링크)

 

GitHub - SeonminKim1/Python: Python Framework & Libary

Python Framework & Libary. Contribute to SeonminKim1/Python development by creating an account on GitHub.

github.com

 


 

👉 코드 - templates/index.html

form 바로 아래에 {% csrf token %} 을 작성해준다.

<html>
    <body>
        <form method="post" action='/score/'>
            {% csrf_token %}
            <div>
                <label for="score">점수를 입력하세요</label><input type="text" id="score" name="score">
            </div>
            <button type="submit">점수 제출</button>
        </form>
    </body>
</html>

 

👉 코드 - views.py, url.py

views.py

from django.shortcuts import render
from django.http import HttpResponse

def score_func(request):
    if request.method == 'GET':
        return render(request, 'index.html')
    elif request.method == 'POST':
        score = int(request.POST.get('score', 0))
        print('받은 score 데이터', score)
        if score >= 70:
            msg = '합격'
        else:
            msg = '불합격'
        return HttpResponse(msg) # or redirect

 

urls.py

from django.urls import path
from .views import score_func

urlpatterns = [
    path('score/', score_func)
]