본문 바로가기
  • 살짝 구운 김 유나
Web/Django

Django Form

by yunae 2022. 9. 7.

Form Class

 

Form은 Django의 유효성 검사 도구 중 하나로 외부의 악의적 공격 및 데이터 손상에 대한 중요한 방어수단이다.

 

Django는 Form과 관련한 유효성 검사를 단순화하고 자동화 할 수 있는 기능을 제공

 

Django는 Form에 관련된 작업의 세 부분을 처리

1. 렌더링을 위한 데이터 준비 및 재구성

2. 데이터에 대한 HTML forms 생성

3. 클라이언트로부터 받은 데이터 수신 및 처리

 

 

The Django Form class

: Django form 관리 시스템의 핵심

 

 

Form class 선언

-> model과 마찬가지로 상속을 통해 선언 ( forms 라이브러리의 Form 클래스를 상속받음)

-> 앱 폴더에 forms.py를 생성 후 ArticleFrom class 선언

 

 

 

Form rendering options

1. as_p()

: 각 필드가 단락으로 감싸져서 렌덜이

2. as_ul()

: 각 필드가 목록 항목으로 감싸져서 렌더링, <ul> 태그는 직접 작성해야

3. as_table()

: 각 필드가 테이블 행으로 감싸져서 렌더링

 

 

 

form 클래스를 이용해서 html 수정

{{ form.as_p }}

-> 줄바꿈 문제 해결

 

 

Dropdown)

Radio)

 

 

 

 

 

 

 

 

Django ModelForm

 

Form class 에서 필드를 재정의 해야만한다.

ModelForm을 사용하면 모델의 정보를 이미 가지고 있기 때문에 재정의 할 필요 x

 

ModelForm 선언- 어떤 모델을 기반으로 form을 작성할 것인지에 대한 정보를 Meta 클래스( ModelForm의 정보를 작성하는 곳) 에 지정

- fields 속성에 '__all__'을 사용하여 모델의 모든 필드 포함

- 또는 exclude속성을 사용하여 모델에서 포함하지 않을 필드 지정 가능

 

 

[참고]

# 참조 값과 반환 값
model = Article

'''
Article을 호출하지 않고 (Article()) 이름만 작성
-> 함수를 호출하지 않고 함수 자체를 그대로 전달하여, 다른 함수에서 "필요한 시점"에 호출
'''

 

 

 

 

 

 

ModelForm with view functions

ModelForm으로 인한 view 함수의 구조 변화 알아보기)
form이 필요한 create, update

 

1. CREATE

유효성 검사를 통과하면 데이터 저장 후, 상세 페이지로 redirect

그렇지 않으면, 작성 페이지로 redirect

 

is_valid()

: 유효성 검사를 실행하고, 데이터가 유효한지 여부를 boolean으로 반환

- 반환 값이 False일 경우 form 인스턴스의 errors 속성에 값이 작성됨 ( 실패 원인이 딕셔너리 형태로 저장 )

다음과 같이 하면 메시지 출력도 가능

 

 

2. UPDATE

: ModelForm의 인자 instance는 수정 대상이 되는 객체를 지정

 

1) request.POST : 사용자가 form을 통해 전송한 데이터

2) instance : 수정이 되는 대상

 

수정하기,,,

edit - view 수정

edit - template 수정

update - view 수정

 

 

 

Form과 ModelForm

ModelForm이 Form보다 더 좋은 것은 아님. 각자 역할이 다를 뿐,,

Form ModelForm
- 사용자로부터 받는 데이터가 DB와 연관되어 있지 않은 경우
ex) 로그인( 인증 과정에서만 사용 후 별도로 DB에 저장 x)
- 사용자로부터 받는 데이터가 DB와 연관된 경우
- 데이터의 유효성 검사가 끝나면 데이터를 각각 어떤 레코드에 맵핑해야할지 이미 알고있기 때문에 save() 호출 가능

 

 

 

 

 

 

크리스마스 되기 4일전 즉흥으로 갔던 경주여행. 생각해보니 우리말고 누가 광주에서 경주를 당일치기로 갈까..? 웃기는 청춘,,

+ 인스타에서 찾은 글,,조아서,,,캡쳐,,

 

배려하는 마음과, 부딪혀보려는 마음.  포기하지 않는 자세라면 어디든 누구와도 좋겠다.

 

 

'Web > Django' 카테고리의 다른 글

실습 - 1:N 을 활용한 app 작성  (0) 2022.10.06
쿠키와 세션  (0) 2022.09.08
render vs redirect  (0) 2022.09.05
Django Model 2 - QuerySet API  (0) 2022.09.02
Form Data 보내고 가져오기  (0) 2022.09.02

댓글