티스토리 뷰

Django

장고 폼의 기초

nickas 2019. 7. 11. 15:49

어떠한 데이터든 간에 입력 데이터라고 한다면 장고 폼을 이용하여 유효성 검사를 해야 한다.

 

HTML forms

<form>...</form>

 

<input> elements, a form must specify two things:

  • where: the URL to which the data corresponding to the user's input should be returned
  • how: the HTTP mehtod the data should be returned by

Django's role in forms

  • preparing and restructuring data to make it ready for rendering
  • creating HTML forms for the data
  • receiving and processing submitted forms and data from the client

The Django Form class

A form class's fields map to HTML form <input> elements. (A ModelForm maps a model class's fields to HTML form <input> elements via a Form; this is what the Django admin is based upon.)

 

A form's fields are themselves classes; they manage form data and perform validation when a form is submitted. A DateField and a FileField handle very different kinds of data and to do different things with it.

 

form's fields

{{ form.name_of_field }}

 

form.hidden_fields

form.visible_fields

form.non_field_errors

form.subject.errors

 

 

 

유효성 검사하기

장고 폼은 파이썬 딕셔너리의 유효성을 검사하는 데 최상의 도구.

import csv
import StringIO

from django import forms

from .models import Purchase, Seller


class PurchaseForm(forms.ModelForm):
	class Meta:
    	model = Purchase
    
    def clean_seller(self):
    	seller = self.cleaned_data["seller"]
        try:
        	Seller.objects.get(name=seller)
        except Seller.DoesNotExist:
        	msg = "{0} does not exist in purchase #{1}.".format(seller, self.cleaned_data["purchase_number"])
            raise forms.ValidationError(msg)
            
        return seller
        
def add_csv_purchases(rows):
    rows = StringID.StringIO(rows)

    records_added = 0
    errors = []
    # 한 줄당 하나의 dict를 생성, 단 첫 번째 줄은 키 값으로 함
    for row in csv.DictReader(rows, delimiter=","):
      # PurchaseForm에 원본 데이터 추가
      form = PurchaseForm(row)
      # 원본 데이터가 유효한지 검사
      if form.is_valid():
          # 원본 데이터가 유효하므로 해당 레코드 저장
          form.save()
          records_added += 1
      else:
          errors.append(form.errors)
	return records_added, errors
  

Form Flow Chart

'Django' 카테고리의 다른 글

queryset  (0) 2019.07.15
Angular4  (0) 2019.07.14
Class ListView()  (0) 2019.07.13
TypeError  (0) 2019.07.12
클래스 기반 뷰의 모범적인 이용  (0) 2019.07.11
최근에 올라온 글
글 보관함