반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- AWS
- 엘라스틱서치
- 리트코드
- elasticsearch
- 해시
- leetcode
- 프로그래머스
- solution
- Easy
- RecommendationSystem
- programmers
- 키바나
- python
- Spark
- 파이썬
- ELK
- 스파크
- dump
- Medium
- dfs
- Algorithm
- 알고리즘
- Django
- CentOS
- daspecialty
- twosum
- kibana
- 장고
- 깊이우선탐색
- Optimization
Archives
- Today
- Total
Archive
[Django] Form 본문
반응형
1. HTML Form
- <form> ~ </form> 사이에 있는 element들의 집합이며 사용자 입력을 받기 위해 사용된다
- <input>
- action : form 데이터를 어디로 보낼지 지정
- method : POST - 폼에 입력된 텍스트, 항목 등의 데이터는 서버로 보내지며, 데이터 전송시 POST 방식만을 사용한다.
- POST : 서버 시스템 상태를 바꾸는 요청
( cf. GET : 서버 시스템 상태를 바꾸지 않는 요청 - URL에 데이터가 포함되어 검색에 적절)
2. Django Form
Form 데이터 처리과정
Form 화면 선택 -> HTML 렌더링 -> Interface를 통한 입력 및 수정 -> 서버에서의 데이터 유효성 검증 -> 저장/전달
Django 제공 기능
- Form 생성에 필요한 데이터를 Form Class로의 구조화
* Form Class : <input>에 매핑되며, Form을 작성하고 어떻게 작동하고 어떻게 보일지를 결정 - Form Class의 데이터를 렌더링하여 HTML 폼 생성
① 렌더링할 객체를 View로 가져옴 (ex. DB로부터 객체 추출)
② 해당 객체를 Templete System으로 넘겨줌
③ HTML 마크업 언어로 변환
- Form 객체 특성 상 렌더링 이후에 사용자가 데이터를 채우게 되므로, 빈 객체를 랜더링하는 일이 잦다. 이때 저장된 모델 객체 혹은 직전에 제출된 HTML Form으로 부터 데이터를 채울수도 있고, 비어있거나 디폴트 값으로 채워 보여줄 수도 있다.
- 제출된 Form 수신 및 처리
3. Form Class
ex) POST방식을 이용하여 브라우저에게 Form 데이터를 URL/your-name/으로 보내달라는 요청
: Form 이 제출되면 Post요청에 Form 데이터가 서버로 보내짐 -> 데이터에서 name /value 쌍을 찾아 URL/your-name/ 에
해당하는 View 의 로직에 따라 name /value 쌍을 찾아 처리한다
<form action="/your-name/" method="post">
<label for = "your_name"> Your name: </label>
<input id="your_name" type="text" name "your_name" value="{{ current_name }}">
<input type="submit" value="OK">
</form>
위의 요청을 구현하기 위해 장고에서 구현하는 방법은 아래와 같다.
1) Form Class 정의
- 각 Form Field는 Widget Class를 가지고 있고, 이는 <input type="text">와 같은 HTML 폼 위젯으로 대응된다.
(ex. Char Field : Text Input Widget이 Default, <input type="text">로 변환) - Form Class는 유효성 검사를 실행하는 is_valid()메소드를 통해 모든 필드가 유효한지를 확인한다.
from django import forms
class NameForm(forms.Form):
your_name = forms.CharField(label='Your name', max_length=100)
Form Class가 렌더링되면 아래와 같은 HTML 폼이 생성된다.
<label for="your_name">Your name: </label>
<input id="your_name" type="text" name="your_name" maxlength="100">
2) 템플릿 코드 수정
- {{ form }} 변수에 Form Class가 들어있다.
- 변수 생성시 옵션으론 {{ form }} 이외에도 3가지 옵션이 추가로 존재한다
- {{ form.as_table }} : <tr> 태그로 감싸서 테이블 셀로 렌더링
- {{ form.as_p }} : <p> 태그로 감싸서 렌더링
- { form.as_ul }} : <li> 태그로 감싸서 렌더링
<form action="/your-name/" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit" />
</form>
4. Form Class Processing in View
- Form을 처리하기 위해서는 Form을 보여주는 View / 제출된 Form을 처리하는 View / 유효하지 않은 From을 처리하는 View 총 세 개가 필요하다. (아래 예제에선 두개만 고려함)
- Django에선 하나의 View로 Form을 처리한다.
- GET 방식으로 요청을 받은 경우 처음 폼을 보여주고, POST 방식으로 요청을 받은 경우 제출된 폼을 처리하여 결과를 보여준다
Ex)
from django.shortcuts import render
from django.http import HttpResponseRedirect
def get_name(request):
if request.method == "POST":
form = NameForm(request.POST)
if form.is_valid():
new_name = form.cleaned_data['name']
return HttpResponseRedirect('/thinks/')
else:
form = NameForm()
return render(request, 'name.html', {'form' : form}}
파이썬 웹 프로그래밍 - 4. Django 핵심기능
반응형
'------ Web ------ > Backend' 카테고리의 다른 글
[Django] Book Application 개발 (실습3) (0) | 2022.07.13 |
---|---|
[Django] Class-based View (0) | 2022.07.04 |
[Django] Template System (0) | 2022.06.28 |
[Django] Admin (0) | 2022.06.26 |
[Django] View / Template Coding Overview (실습2) (0) | 2022.06.26 |
Comments