dev/Django
[Django]Forms.py (+ CSRF 설명)
mingracle
2022. 2. 6. 00:11
간단한 Form을 만들때 forms.py를 따로 만들어 사용이 가능
but. Form으로 작성하면 models.py, forms.py를 따로 관리해야하기 때문에 번거롭다.
- forms.py -
from django import forms #django안에 forms라는 프레임워크가 따로 존재한다. class ResForm(forms.Form): title = form.CharField(label='타이틀', max_length=50) con = form.CharField(label='내용', widget=forms.Textarea) # CharField의 기본설정은 input type = "text" # textarea: 텍스트 영역 정의 # models.py에서의 con = models.TextField()과 같이 사용하거나 widget을 이용해도 된다. |
- views.py -
from django.shortcuts import render from .forms import ResForm def sub(request): form = ResForm() return render(request, 'two/sub.html', {'form':form}) # form의 이름을 'form'으로 한다 |
- sub.html -
<form action ="{% url 'sub' %}" method ="post"> <!--post방식으로 보내줌--> {% csrf_token %} <!--인증--> {{form}} </form> |
{% csrf_token %}
: 해당 post요청에 대해 csrf token을 발급받고 체크해주도록 한다.
- urls.py에 url경로 추가 -
path('sub/', views.sub, name='sub'), |
CSRF(Cross Site Request Forgery)
1. 사용자가 페이지에 접속하면 장고에서 자동으로 csrf_token을 사용자에게 보내 cookie에 저장
2. 사용자가 form을 입력한 후 submit버튼을 누른다.
3. form과 cookie csrf_token을 같이 post로 전송한다.
4. 전송된 token유효성 검증
5. token이 유효하지 않으면 검증오류 403error 발생