바뀜

4,761 바이트 제거됨 ,  2023년 10월 26일 (목) 14:45
잔글
편집 요약 없음
2번째 줄: 2번째 줄:     
===폼===
 
===폼===
폼에 입력된 데이터는 서버로 보내진다. 홈은 <input>과 어디로 보낼지 정해주는 action과 어떤 방법으로 보낼지 method 속성으로 이루어져 있다. 사용가능한 메소드는 GET과 POST뿐. 사실상 POST만 사용된다.
+
폼에 입력된 데이터는 서버로 보내진다.
 +
 
 +
폼은 <input>과 어디로 보낼지 정해주는 action과 어떤 방법으로 보낼지 method 속성으로 이루어져 있다.  
    
(검색의 경우엔 GET. 데이터가 URL에 포함되어, 저장하거나 공유하기 쉽다.)
 
(검색의 경우엔 GET. 데이터가 URL에 포함되어, 저장하거나 공유하기 쉽다.)
 
===GET과 POST===
 
===GET과 POST===
 +
사용가능한 메소드는 GET과 POST뿐. 사실상 POST만 사용된다.
 
{| class="wikitable"
 
{| class="wikitable"
 
|+
 
|+
15번째 줄: 18번째 줄:  
|주소에 변수가 드러난다.
 
|주소에 변수가 드러난다.
 
|입력내용이 감춰진다.
 
|입력내용이 감춰진다.
|-
+
body에 정보를 담아 보낸다.
|
  −
|
  −
|body에 정보를 담아 보낸다.
   
|-
 
|-
 
|용법
 
|용법
 
|어떤 정보를 열람할 때.
 
|어떤 정보를 열람할 때.
 
|어떤 정보를 작성, 수정할 때.
 
|어떤 정보를 작성, 수정할 때.
|-
  −
|
  −
|
  −
|
   
|}
 
|}
 
=GET입력받기=
 
=GET입력받기=
46번째 줄: 42번째 줄:  
안쓰거나 '#'을 두면 현재 페이지를 의미한다.
 
안쓰거나 '#'을 두면 현재 페이지를 의미한다.
 
|}
 
|}
===input 태그 요소===
+
===사용자로부터 POST입력받기===
{| class="wikitable"
  −
|+
  −
!요소
  −
!설명
  −
|-
  −
|name=
  −
|폼을 식별하기 위한 이름. view에서 구분하기 위한 식별자이다.
  −
|-
  −
|target=
  −
|현재의 창이 아닌, 다른 지역에서 열리게 할 수 있다.
  −
|-
  −
|enctype=
  −
|데이터의 인코딩 타입.(암호화방식 지정)
  −
|-
  −
|value=
  −
|상황에 따라 보낼 값 혹은 나타낼 값.
  −
|}다음과 같이 쓰인다. <code><form method="get" action="{% url 'pubg:search_result' %}" ></code>
  −
 
  −
최소한 method와 submit이 필요하다.
  −
 
  −
장고에선 csrf 토큰이 필수로 요구된다.
  −
===input type===
  −
폼은 다음과 같은 형태로 입력된다.<syntaxhighlight lang="html">
  −
<form>
  −
    <li>이름: <input type="text" id="user_name"></li>
  −
    <li>전화번호: <input type="tel" id="user_tel"></li>
  −
    <li>메일주소: <input type="email" id="user_email"></li>
  −
    <input type="submit" value="전송하기">
  −
</form>
  −
</syntaxhighlight>submit 버튼으로 전송되어 보내진 데이터는 해당 url 그대로 요청방식만 post로 바꾸어 요청한다.
  −
 
  −
간단한 텍스트를 받는 형태가 되는데, 이처럼 form 안엔 다양한 input type이 있다.
  −
 
  −
다양한 방법이 있겠지만, input의 name속성에 데이터를 담아 get으로 전달한다.
  −
{| class="wikitable"
  −
!type
  −
!설명
  −
!
  −
|-
  −
| colspan="1" rowspan="1" |hidden
  −
| colspan="1" rowspan="1" |사용자에게는 보여지지 않고 서버로 넘겨지는 값
  −
|
  −
|-
  −
| colspan="1" rowspan="1" |text
  −
| colspan="1" rowspan="1" |한 줄짜리 텍스트 입력상자
  −
| rowspan="2" |
  −
{| class="wikitable"
  −
|+
  −
!옵션
  −
!설명
  −
|-
  −
|maxlength
  −
|입력할 수 있는 최대 문자갯수
  −
|-
  −
|size
  −
|입력창의 크기(단위는 문자갯수)
  −
|-
  −
|value
  −
|초기텍스트
  −
|}
  −
|-
  −
|password
  −
|문자 대신 *등 다른 글자를 출력하여 다른 사람이 볼 수 없게 한다.
  −
|-
  −
|textarea
  −
|여러 줄의 텍스트를 입력받을 때.
  −
|
  −
{| class="wikitable"
  −
!옵션
  −
!설명
  −
|-
  −
|wrap
  −
|자동 줄바꿈 처리 지정.
  −
OFF, HARD, SOFT 중에서 가능.
  −
|}<textarea cols="20" rows="5">초기텍스트. 없으면 빈공간</textarea>
  −
|-
  −
|datalist
  −
|선택 가능한 데이터 목록을 보여준다.
  −
(그러나, 목록 외에 값을 써넣을 수도 있다.)
  −
 
  −
input의 list속성값과 datalist의 id속성을 동일하게 두어 연결한다.
  −
|<input type="text" list="이름">
  −
<datalist id="이름">
  −
 
  −
<option value="선택1">
  −
 
  −
<option value="선택2">
  −
 
  −
...
  −
 
  −
</datalist>
  −
|-
  −
|select
  −
|드롭다운 목록을 보여주고 그 중 하나를 선택.
  −
위와 동일한 형태지만, 선택만 가능하다.
  −
 
  −
selected 옵션으로 처음 선택되어 있는 것을 지정할 수 있음.
  −
|<select name="이름">
  −
<option value="선택1"></option>
  −
 
  −
<option value="선택2" selected></option>
  −
 
  −
<option value="선택3"></option>
  −
 
  −
[아마 >< 사이에 텍스트를 넣으면 그 텍스트가 나올 것 같은데;]
  −
|-
  −
| colspan="1" rowspan="1" |search
  −
| colspan="1" rowspan="1" |검색 상자
  −
|
  −
|-
  −
| colspan="1" rowspan="1" |tel
  −
| colspan="1" rowspan="1" |전화번호 입력 필드
  −
|
  −
|-
  −
| colspan="1" rowspan="1" |url
  −
| colspan="1" rowspan="1" |URL 필드
  −
|
  −
|-
  −
| colspan="1" rowspan="1" |email
  −
| colspan="1" rowspan="1" |메일 주소 필드
  −
|
  −
|-
  −
| colspan="1" rowspan="1" |password
  −
| colspan="1" rowspan="1" |비밀번호 필드
  −
|
  −
|-
  −
| colspan="1" rowspan="1" |number
  −
| colspan="1" rowspan="1" |숫자 조절 화살표
  −
|
  −
|-
  −
| colspan="1" rowspan="1" |checkbox
  −
| colspan="1" rowspan="1" |주어진 항목에서 2개 이상 선택 가능한 체크박스
  −
|
  −
|-
  −
| colspan="1" rowspan="1" |radio
  −
| colspan="1" rowspan="1" |주어진 항목에서 1개만 선택 가능한 라디오 버튼
  −
|value에 request에 담을 값을 지정한다.
  −
|-
  −
|month
  −
|연, 월
  −
|
  −
|-
  −
| colspan="1" rowspan="1" |date
  −
| colspan="1" rowspan="1" |연, 월, 일
  −
|<input type='date' name='이름' value="2020-03-22">
  −
|-
  −
| colspan="1" rowspan="1" |submit
  −
| colspan="1" rowspan="1" |전송(보내기) 버튼
  −
|<input type="submit" value="버튼에나타낼텍스트">
  −
|-
  −
| colspan="1" rowspan="1" |file
  −
| colspan="1" rowspan="1" |첨부 파일.(각종 이미지, 음악, 영상 등 미디어파일)
  −
|accetp 속성으로 받을 파일의 확장자 지정 가능.
  −
image/* 형태로 모든 이미지를 받을 수도 있음.
  −
|-
  −
| colspan="1" rowspan="1" |reset
  −
| colspan="1" rowspan="1" |초기화(리셋)
  −
|
  −
|-
  −
|hidden
  −
|사용자에게 보이지 않지만, 담겨저서 보내지는 것.
  −
|<nowiki><input type="hidden" name="이름" value="{{변수}}"></nowiki><nowiki></input></nowiki>
  −
|}
  −
====input 속성====
  −
{| class="wikitable"
  −
!속성
  −
!설명
  −
|-
  −
| colspan="1" rowspan="1" |placeholder
  −
| colspan="1" rowspan="1" |필드 안에 내용을 포함하고 있다가 클릭하면 사라져, 입력할 수 있도록 하는 속성.
  −
|-
  −
|required
  −
|필수로 입력해야 하는 것들을 지정한다.(그냥 이 단어만 집어넣으면 됨)
  −
|-
  −
|name
  −
|데이터가 담기면 name=값 형태의 폼 데이터를 만들어 보낸다.
  −
|}
  −
 
  −
 
  −
=사용자로부터 POST입력받기=
   
==폼==
 
==폼==
 
===탬플릿===
 
===탬플릿===
237번째 줄: 53번째 줄:  
===url추가===
 
===url추가===
 
path에 경로와 함수를 추가해준다.
 
path에 경로와 함수를 추가해준다.
===뷰===
  −
[지금 위키문법이 사용되서 글이 안보이게 된 듯한데;;]
     −
 
+
== 폼 생성 ==
 
  −
폼 생성
   
#
 
#
최종적으로 템플릿에는 다음과 같이 쓰인다. {{form}}은 뷰에서 넘어오는 변수.
+
최종적으로 템플릿에는 다음과 같이 쓰인다. <nowiki>{{form}}</nowiki>은 뷰에서 넘어오는 변수.
    
<form action='주소' method="post">
 
<form action='주소' method="post">
251번째 줄: 63번째 줄:     
   <nowiki>{{Form}}</nowiki>
 
   <nowiki>{{Form}}</nowiki>
  −
   
      
</form>
 
</form>
   −
폼을 처리하기 위해선 폼을 보여주는 view와 폼을 처리하는 view. 2개가 필요하다. 보통 이 둘을 하나의 뷰로 통합하여 다룬다.p.194
+
폼을 처리하기 위해선 폼을 보여주는 view와 폼을 처리하는 view. 2개가 필요하다. 보통 이 둘을 하나의 뷰로 통합하여 다룬다.
    
if 문을 써서, HTTP요청방식에 따라 달리 작동하게 한다.(같은 주소에서 요청에 따라 달리 작동하게끔.)
 
if 문을 써서, HTTP요청방식에 따라 달리 작동하게 한다.(같은 주소에서 요청에 따라 달리 작동하게끔.)
   −
 
+
{% csrf_token%}은 form으로 전송된 데이터가 웹페이지에서 작성된 것인지 판단해주는 역할. 기타 해킹 툴 등에서 전송된 경우, csrf_token값이 일치하지 않아 오류가 발생한다. 때문에 form 바로 빝에 이걸 두어야 한다.
{% csrf_token %}은 form으로 전송된 데이터가 웹페이지에서 작성된 것인지 판단해주는 역할. 기타 해킹 툴 등에서 전송된 경우, csrf_token값이 일치하지 않아 오류가 발생한다. 때문에 form 바로 빝에 이걸 두어야 한다.
      
==탬플릿에서의 활용==
 
==탬플릿에서의 활용==
274번째 줄: 83번째 줄:  
     {% csrf_token %}
 
     {% csrf_token %}
 
     {{form}}
 
     {{form}}
     <input type="submit" value="버튼에넣을말"
+
     <input type="submit" value="버튼에넣을말">
 
</form>
 
</form>
 
</syntaxhighlight>
 
</syntaxhighlight>
311번째 줄: 120번째 줄:  
|위에선 <nowiki>{{form}}</nowiki>태그로 한번에 코드가 만들어지게 했지만, 각각의 요소에 대해 따로 입력을 받을 수도 있다.
 
|위에선 <nowiki>{{form}}</nowiki>태그로 한번에 코드가 만들어지게 했지만, 각각의 요소에 대해 따로 입력을 받을 수도 있다.
 
따로따로 나누어 HTML을 꾸며주고 싶은 경우.
 
따로따로 나누어 HTML을 꾸며주고 싶은 경우.
 +
|-
 +
|제출 전 확인
 +
|onsubmit 옵션을 다음과 같이 붙여넣으면 제출 전 간단한 확인이 이루어진다.
 +
|<syntaxhighlight lang="html+django">
 +
<form action="{% url  %}" onsubmit="return confirm('경고. 엑셀의 내용으로 학생 응답을 덮어씁니다.')">
 +
</syntaxhighlight>
 
|}
 
|}
 
==데이터 받기==
 
==데이터 받기==
316번째 줄: 131번째 줄:     
===폼과 탬플릿===
 
===폼과 탬플릿===
잘 정리해보자.
+
#field.id_for_label - field의 tag에서 사용될 id 값으로 보통 'id_ + field.name'
#'''field.id_for_label''' - field의 tag에서 사용될 id 값으로 보통 'id_ + field.name'
   
#field.initial - 모델에서의 default 속성의 값
 
#field.initial - 모델에서의 default 속성의 값
 
#field.is_hidden - hidden 속성이 있다면 True 그렇지 않으면 False
 
#field.is_hidden - hidden 속성이 있다면 True 그렇지 않으면 False
#'''field.errors''' - field의 유효성 검증할 때 발견된 오류들
+
#field.errors - field의 유효성 검증할 때 발견된 오류들
 
#field.html_name - 렌더링될 tag의 name 속성의 값. 즉, 'form.prefix + field.name'로 폼클래스에 prefix 변수가 선언되어 있지 않으면 field.name 과 동일
 
#field.html_name - 렌더링될 tag의 name 속성의 값. 즉, 'form.prefix + field.name'로 폼클래스에 prefix 변수가 선언되어 있지 않으면 field.name 과 동일
 
#field.help_text - 도움말의 역할을 하는 텍스트로 form 필드에 해당 속성이 없으면 model 필드에서 참조
 
#field.help_text - 도움말의 역할을 하는 텍스트로 form 필드에 해당 속성이 없으면 model 필드에서 참조
#'''field.label''' - 모델의 verbose_name과 동일한 데이터로 해당 필드를 사람이 이해하기 쉬게 부르는 호칭
+
#field.label - 모델의 verbose_name과 동일한 데이터로 해당 필드를 사람이 이해하기 쉬게 부르는 호칭
 
#field.label_tag - field.label 을 렌더링한 태그
 
#field.label_tag - field.label 을 렌더링한 태그
 
#field.name - field 의 이름. 폼에 선언된 field의 변수명과 동일
 
#field.name - field 의 이름. 폼에 선언된 field의 변수명과 동일
#'''field.value''' - field에 저장된 값
+
#field.value - field에 저장된 값