본문 바로가기
App Programming/Django

[Django] 폼 (Form)

by goatlab 2023. 6. 27.
728x90
반응형
SMALL

폼 (Form)

 

 

HTML에서 양식은 <form>...</form>에서 방문자가 텍스트 입력, 옵션 선택, 개체 또는 컨트롤 조작 등과 같은 작업을 수행한 다음 해당 정보를 다시 서버로 보낼 수 있도록 하는 내부 요소 모음이다.

 

<form action="/url/" method="post">
    <label for="your_name">Your name: </label>
    <input id="your_name" type="text" name="your_name">
    <input type="submit" value="OK">
</form>
  • 장고 폼은 데이터를 사용자로부터 서버로 전송하는 데 사용할 수 있는 도구
  • 폼은 데이터를 모델에 저장하는 데 사용
  • forms 모듈 사용
  • 클래스에서 각 필드 (CharField, TextField, DataField)를 정의
  • s_valid() 메서드를 사용하여 유효한지 확인

 

장고 폼

 

from django import forms

class ContactForm(forms.Form):
	subject = forms.CharField(max_length=100)
    message = forms.TextField()
    sender = forms.EmailField()
    cc_myself = forms.BooleanField(required=False)
    
class contact(request):
	if request.method == 'POST':
    	form = ContactForm(request.POST)
        
        if form.is_vaild(): # 데이터를 모델에 저장
        	contact = Contact(
            	subject = form.cleaned_data['subject'],
                message = form.cleaned_data['message'],
                sender = form.cleaned_data['sender'],
                cc_myself = form.cleaned_data['cc_myself'],
            )
		
        contact.save()
        
        return HttpResponseRedirect('/thanks')
        
	else:
    	form = ContactForm()

	return render(request, 'contact.html', {'form': form})

 

contact.html 템플릿

 

<form action="/contact/" method="post">
	{% csrf_token %}
    
    <label for="subject">제목:</label>
    <input type="text" name="subject" id="subject"
    value="{{ form.cleaned_data['subject'] }}">
    
    <label for="message">메시지:</label>
    <textarea name="message" id="message">
    	{{ form.cleaned_data['message'] }}
	</textarea>
    
    <label for="sender">보낸 사람:</label>
    <input type="email" name="sender" id="sender"
    value="{{ form.cleaned_data['sender'] }}">
    
    <input type="checkbox" name="cc_myself" id="cc_myself"
    {{ form.cleaned_data['cc_myself'] ? 'checked' : '' }}>
    CC 나 자신
    
    <input type="submit" value="보내기">
</form>

 

장고 폼 처리 순서

 

단계 설명
사전 준비 Form 클래스를 정의한다.
GET 처리 Form 객체를 생성하고 템플릿에 처리를 위임한다.
템플릿 Form 태그를 생성한다.
웹 브라우저 Form을 표시한다.
POST 처리 사용자 입력을 수신하고 유효성 검사를 수행한다.
유효성 검사 데이터가 유효한지 확인한다.
데이터 처리 데이터가 유효한 경우 데이터베이스에 저장한다.
리다이렉트 성공적으로 처리된 경우 새 페이지로 리다이렉트한다.

 

ModelForm 클래스

 

ModelForm 클래스는 데이터베이스 모델인 모델을 기반으로 하는 Form 클래스이다. ModelForm 클래스는 모델 클래스를 상속하고 Meta 클래스에 다음 속성을 정의한다.

 

  • model : 사용되는 모델 클래스
  • fields : Form에 표시할 필드 목록
  • exclude : Form에 표시하지 않을 필드 목록

 

ModelForm 클래스는 Form 클래스의 기능을 포함하고 있으며 다음 기능을 추가로 제공한다.

 

  • instance 속성 : ModelForm에 연결된 모델 인스턴스를 가져오는 데 사용된다.
  • save() 메서드 : ModelForm의 데이터를 데이터베이스에 저장하는 데 사용된다.
  • 유효성 검사를 수행할 때 Form에 대한 유효성 검사와 더불어 모델에 대한 유효성 검사도 수행한다.

 

https://docs.djangoproject.com/en/4.2/topics/forms/

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com

 

728x90
반응형
LIST