<Django Form>
form 태그를 이용한 간단한 제출란을 만들어보자 !
second 웹 앱 폴더에 forms.py를 만들어서 PostForm 클래스를 만든다.
models.py와 forms.py를 따로 구분하는 이유는 다음과 같다.
model 클래스를 가져와서 필드명을 바탕으로 Input값을 입력하도록 한다.
django의 models, forms 모듈을 사용한다는 것이 가장 큰 차이점이고,
label 즉 input 창에 이름을 정하고 있으며 widget 옵션으로 보여질 input 창의 형태도 제시해준다.
create url로 이동하면 create 함수를 만나게 되고, PostForm()의 반환값이 저장된 form 변수에 의해
create.html파일에 form 변수가 넘어와 렌더링된다.
CSRF 공격을 방어하기 위해 csrf_token 태그를 사용한다.
<Form으로 데이터 전송하기>
데이터를 전송하기 위한 form 태그를 만든다.
def confirm(request):
form = PostForm(request.POST)
if form.is_valid():
return render(request, 'second/confirm.html', {'form':form})
return HttpResponseRedirect('/create/')
views.py에 다음과 같이 form 태그를 작성해주고,
confirm에는 이 처럼 단순히 form데이터를 보여주는 방식으로 작성한다.
<Model Form 작성하기>
Forms.py에서 PostForm 클래스 내부에 Meta 클래스를 사용해 필드, 데이터베이스 이름 등의 설정을 할 수 있도록 한다.
from django.utils.translation import gettext_lazy as _
class PostForm(ModelForm):
class Meta:
model = Post
fields = ['title', 'content']
labels = {
'title' : _('제목'),
'contents': _('내용'),
}
help_texts = {
'title' : _('제목을 입력해주세요'),
'content' : _('내용을 입력해주세요'),
}
error_messages = {
'name': {
'max_length': _('제목이 너무 깁니다. 30자 이하로 해주세요')
}
}
여기서 gettext_lazy라는 메소드를 사용해서 필드명, 예외 상황 방생시 호출 문구 등을 정한다.
<Form으로 데이터 저장하기>
1. create에서 post로 form 을 출력
2. create에서 데이터를 입력받기
create.html에서
def create(request):
if request_method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
new_item = form.save()
return HttpResponseRedirect('/second/list')
form = PostForm()
return render(request,'second/create.html', {'form' : form } )
POST방식으로 가져왔을 경우, form이 오류사항이 발생하지 않으면 save()매소드를 받아온 값을 가진 객체를 저장하게 된다
form 객체에서 as_table()로 <table>HTML로 폼을 출력한다.
'Framework > Django' 카테고리의 다른 글
MTV패턴에서 MVC패턴으로 아키텍처 변경, 기존 코드의 문제점 분석과 해결책 제시 (0) | 2021.11.04 |
---|---|
파이썬으로 장고(Django) 공략하기 : 입문 (2)Django 모델 (0) | 2021.10.24 |
파이썬으로 장고(Django) 공략하기 : 입문 (1)Django 시작하기 (0) | 2021.10.24 |
인프런 Django 초보 가이드 실습을 통해 알아보는 장고 입문 (0) | 2021.10.01 |