262번째 줄: |
262번째 줄: |
| | | |
| {% csrf_token %}은 form으로 전송된 데이터가 웹페이지에서 작성된 것인지 판단해주는 역할. 기타 해킹 툴 등에서 전송된 경우, csrf_token값이 일치하지 않아 오류가 발생한다. 때문에 form 바로 빝에 이걸 두어야 한다. | | {% csrf_token %}은 form으로 전송된 데이터가 웹페이지에서 작성된 것인지 판단해주는 역할. 기타 해킹 툴 등에서 전송된 경우, csrf_token값이 일치하지 않아 오류가 발생한다. 때문에 form 바로 빝에 이걸 두어야 한다. |
| + | |
| + | ==탬플릿에서의 활용== |
| + | {| class="wikitable" |
| + | ! |
| + | ! |
| + | ! |
| + | |- |
| + | |탬플릿에서 입력 |
| + | |<syntaxhighlight lang="html+django"> |
| + | <form action="{{url 주소}}" method="post"> |
| + | {% csrf_token %} |
| + | {{form}} |
| + | <input type="submit" value="버튼에넣을말" |
| + | </form> |
| + | </syntaxhighlight> |
| + | | |
| + | *<nowiki>{{form}}</nowiki>태그를 넣으면 자동으로 form에 맞는 필드를 생성해준다. |
| + | *CSRF 공격을 방지하기 위해 form태그 아래 필수적으로 추가해주고, |
| + | *submit 버튼은 개발자가 직접 만들어주어야 한다. |
| + | |- |
| + | |폼태그의 종류 |
| + | | |
| + | {| class="wikitable" |
| + | |+ |
| + | !종류 |
| + | !설명 |
| + | |- |
| + | |<nowiki>{{form.as_table}}</nowiki> |
| + | |<nowiki><tr></nowiki>태그로 감싸서 렌더링된다. <nowiki>{{form}}</nowiki>과 동일함. |
| + | |- |
| + | |<nowiki>{{form.as_p}}</nowiki> |
| + | |<nowiki><p>태그로 감싸 렌더링된다.</nowiki> |
| + | |- |
| + | |<nowiki>{{form.as_ul}}</nowiki> |
| + | |<nowiki><li>태그로 감싸 렌더링된다.</nowiki> |
| + | |} |
| + | |보통은 p태그로 감싼 후 css에서 p태그를 다듬는 방식을 사용한다. |
| + | 다음과 같은 형태로 요소별로 css를 먹여 꾸며주기도 한다. |
| + | |
| + | <nowiki>#</nowiki>섹션명 input[type="password"]{ |
| + | |
| + | 내용 |
| + | |
| + | } |
| + | |- |
| + | |요소 나누어 받기 |
| + | | |
| + | |위에선 <nowiki>{{form}}</nowiki>태그로 한번에 코드가 만들어지게 했지만, 각각의 요소에 대해 따로 입력을 받을 수도 있다. |
| + | 따로따로 나누어 HTML을 꾸며주고 싶은 경우. |
| + | |} |
| + | ==데이터 받기== |
| + | 웹페이지에서 받은 데이터의 경우, form의 cleaned_date 속성에 담긴다. 즉, form.cleaned_data로 해당 데이터에 접근할 수 있다. |
| + | |
| + | ===폼과 탬플릿=== |
| + | 잘 정리해보자. |
| + | #'''field.id_for_label''' - field의 tag에서 사용될 id 값으로 보통 'id_ + field.name' |
| + | #field.initial - 모델에서의 default 속성의 값 |
| + | #field.is_hidden - hidden 속성이 있다면 True 그렇지 않으면 False |
| + | #'''field.errors''' - field의 유효성 검증할 때 발견된 오류들 |
| + | #field.html_name - 렌더링될 tag의 name 속성의 값. 즉, 'form.prefix + field.name'로 폼클래스에 prefix 변수가 선언되어 있지 않으면 field.name 과 동일 |
| + | #field.help_text - 도움말의 역할을 하는 텍스트로 form 필드에 해당 속성이 없으면 model 필드에서 참조 |
| + | #'''field.label''' - 모델의 verbose_name과 동일한 데이터로 해당 필드를 사람이 이해하기 쉬게 부르는 호칭 |
| + | #field.label_tag - field.label 을 렌더링한 태그 |
| + | #field.name - field 의 이름. 폼에 선언된 field의 변수명과 동일 |
| + | #'''field.value''' - field에 저장된 값 |