마음만은 한량 햄버거 메뉴
반응형

Django Form

    • 프론트엔드와 인터페이싱하기위해 사용
    • Form Html을 제공하고, 입력값이 들어오면 validation을 체크하는 역할을 한다.
    • 체크에 통과한 값들을 Dict 타입으로 제공한다. (cleaned_data)


적용 순서


1. Forms.py 생성하기

    • 해당 파일이 존재하지 않으므로 App안에 직접 생성해준다.

2. Form 클래스 정의하기
    • Form과 DB는 관계가 없으므로 문자열은 CharField와 TextArea로 나누지 않고 동일하게 CharField로 생성한다.    
      • 단, Widget을 이용해 TextArea로 구분한다.


3) 유효성 검사를 위한 함수 추가

    • raise forms.ValidationError를 이용해 유효성 검사를 목적으로 하는 함수를 추가한다.
    • 검사하고자 하는 필드에 validators 인자와 함수를 함께 적용한다. (일급 함수이므로 가능) 

title = forms.CharField(validatiors = [length_3_validators])

※ 유효성 검사를 위한 함수는 form이 아닌 models에서 생성해준다.



4) View 함수에서 Form 인스턴스 생성

    • GET/ POST 요청을 구분해 인스턴스를 생성한다.
    • POST 요청에 한해 입력값 유효성을 검증한다.
      • is_valid 함수가 실행될 때, form 인스턴스에 등록된 모든 valid 들이 실행된다.

if request.method = 'POST':

form = Form(request.POST, request.FILES)    # FILES는 파일 입출력 시에만 적어준다.

if form.is_valid():

'''

Post로 넘어온 값을 저장하는 방법 1

post = Post()

post.title = form.cleaned_data['title']

post.content = form.cleaned_data['content']

post.save()


방법 2

post = Post.objects.create(**form.cleaned_data)

post.save()

'''


return redirect('/good/')               # 값이 유효할 시, 이동할 주소

else:                                                          # GET 요청이 들어왔을 때

form = Form()


return render(request, 'dojo/post_.html', {

'form' : form,

})


5) 템플릿 생성 및 확인

    • csrf 토큰 발행 및 form.as_table로 HTML 폼을 출력한다.
    • 위에서 정의한 length_3_validators 오류가 뜬다면, form.as_table에 테이블 형태로 출력된다.

<table>

<form action="" method="post">

{% csrf_token %}

<table> {{ form.as_table }} </table>

<input type="submit />

</form>

</table>


반응형
블로그카우, 티스토리 애드센스 강의

웹 개발자가 알려주는 수익형 블로그 고속 성장 A to Z

댓글
위쪽 화살표
로딩바