The View
Django 웹사이트로 다시 전송된 폼 데이터는 뷰가 처리 합니다.
보편적으로, 폼을 발행했던 뷰가 처리합니다. 이는, 같은 로직들을 재사용하게 해줍니다.
폼을 다루기 위해서는,
뷰에서 폼을 발행하려고 하는 URL 을 위해 폼을 인스턴스화 시켜주어야 합니다.
Django 에서 폼을 다루려면, 폼을 출력할 URL 을 생각해놓고, 폼을 발행하기 전에, 폼을 인스턴스화 시켜주어야 한다는 이야기 입니다.
폼 인스턴스화 시켜주기
Django 프로젝트에서, buildingaform 이라는 앱을 따로 생성해주고
buildingaform 앱 안의 구조가 아래와 같다고 가정해 봅시다.
1 | . |
forms.py
파일이 생성되있는것을 확인할수 있고. views.py
가 전달된 폼 데이터를 처리 하거나, 폼을 인스턴스화 합니다.
views.py
파일을 간단하게 살펴보자면,
1 | from django.http import HttpResponseRedirect |
Views.py 에서 폼을 처리하는 포인트
GET 요청으로 이 뷰에 요청이 들어오면
해당 뷰는 비어있는 폼 인스턴스를 생성하고, 폼이 렌더될 템플릿 컨텍스트에 넣어놓습니다. 이것은, 우리가 처음 폼이 존재하는 URL 에 방문하였을때 예상할수 있는 일입니다. 비어있는 폼 인스턴스를 생성하였기 때문에, 비어있는 폼이 화면에 출력 됩니다.
POST 요청으로 사용자가 폼을 제출 하면
해당 뷰는, 또다시 폼 인스턴스를 생성하는데, 요청으로부터 들어온 데이터를 채워줍니다
form=NameForm(request.POST)
. 이를 두고, 데이터를 폼에 묶어준다고 표현합니다.is_valid()
메서드를 호출 합니다is_valid()
를 호출하였을때, True 가 반환되지 않는다면 (즉 False 가 반환될때), 폼과 함께 템플릿으로 다시 돌아갑니다. 이렇게 다시 폼이 출력되는 화면으로 돌아갈때에는, 비어 있는 폼이 아닐수 있습니다. 이전에 제출된 데이터로 채워져 있을것입니다. 따라서, 이전에 제출된 데이터들을 요구사항에 따라 수정 혹은 고쳐줄수 있습니다.만약
is_valid()
가 True 라면유효한 Form data 들을
cleaned_data
속성에서 찾을수 있을것입니다. 이cleaned_data
속성 안에 드렁있는 데이터를 사용하여, 데이터베이스를 업데이트 하거나, 혹은 다른 처리과정을 HTTP redirect 를 하기전에 수행할수 있습니다.