바뀜

둘러보기로 가기 검색하러 가기
2,552 바이트 추가됨 ,  2021년 6월 21일 (월) 11:19
편집 요약 없음
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에 저장된 값

둘러보기 메뉴