내 잡다한 노트

Form 본문

Web/Django

Form

peanutwalnut 2022. 4. 11. 11:04

#개요

사용자 웹 인터페이스를 구성하는 것 중에서 Form은 사용자의 입력을 받기 위한 필드나 위젯들의

묶음을 의미한다. 우리가 자주 보는 로그인 화면이나, 글쓰기 화면 등에 데이터를 입력받는

입력 칸들과 버튼으로 이루어져 있다.

 

#기본적인 형태

<form action=”데이터가 전달될 주소(요청/이동할 주소)” method=”http 요청 방식">

  <input type=”text” name=”title”/>

  <button type=”submit”>입력</button>

</form>

 

method에서 http 요청 방식에는 GET, POST, PUT, DELETE가 있다. 보통은 GET, POST를 자주 사용한다

GET는 주소가 노출돼도 괜찮고, 다른 사용자에게 공유가 가능한 정보를 처리할 때 사용되고,

POST는 회원가입이나 결제와 같이 다른 사용자와 결제해서는 안되는 정보를 처리할 때 사용된다.

 

장고에서는 이러한 폼을 구성하기 쉽게 프레임워크에서 지원해준다.

모델 클래스의 모델 정보들과 연동할 수 있다.

Validation(입력된 정보들의 유효성 검사) 체크를 쉽게 해준다.

악의적인 데이터를 필터링 한다. (sanitisation) 해킹기법같은게 있다.

 

# CSRF token

서버에 들어온 요청이 실제 서버에서 허용한 요청이 맞는지 확인하기 위한 토큰

서버에서는 뷰 페이지를 발행할 때 랜덤으로 생성된 token을 같이 준 뒤 사용자 세션에 

저장해둔다. 그리고 사용자가 서버에 작업을 요청할 때 헤이지에 숨겨있는 token 값이 같이

서버로 전송이 되고 서버에서는 이 token 값이 세션에 저장된 값과 일치하는지 확인하여

해당 요청이 위조된게 아니라는 것을 확인한다.

일치 여부를 확인한 token은 바로 폐기하고 새로운 뷰페이지를 발행할때마다 새로 생성한다.

 

 

def confirm(request):

    form = PostForm(request.POST)  # request의 POST 데이터들을 바로 PostForm에 담을 수 있습니다.

    if form.is_valid(): # 데이터가 form 클래스에서 정의한 조건 (max_length 등)을 만족하는지 체크합니다.

        return render(request, 'second/confirm.html', {'form': form})

    return HttpResponseRedirect('second/create/')  # 데이터가 유효하지 않으면 되돌아갑니다.

 

# Model Form

앞서 배운 form만으로도 데이터를 받아서 Post에 레코드를 추가할 수 있지만,

이렇게 할 경우 post에 속성이 추가되면 form도 그때 그때 수정해줘야하고 form으로 받은

데이터를 다시 꺼내서 모델 클래스의 인스턴스에 넣어주어야 하는 번거로움이 있다.

model form은 이것을 해결해준다.

 

# 기존의 Form

# class PostForm(forms.Form):  # django의 폼을 상속

#     title = forms.CharField(label='제목', max_length=200)

#     content = forms.CharField(label="내용", widget=forms.Textarea)


# ModelForm

class PostForm(ModelForm):

    class Meta:

        model = Post  # 어떤 모델 클래스를 사용할 것인지

        fields = ['title', 'content']  # 입력받을 필드들

 

 

# Model Form으로 데이터 저장하기

기존에 작성된 views.py의 create 메소드에 GET로 요청이 들어왔을 때와 form을 통해

POST로 요청이 들어왔을 때를 구분해서 처리하도록 하자

 

 

 

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

CRUD  (0) 2022.04.17
ORM  (0) 2022.04.11
모델  (0) 2022.04.10
3번째 챕터를 보고 기억해둘 부분들  (0) 2022.04.09
템플릿  (0) 2022.04.08