jc.jang

3강 Form 본문

Django/Django - Form,ModelForm

3강 Form

jangstory 2019. 9. 24. 18:02

주제

  • 장고의 Form의 기본 메커니즘과 활용하는 다양한 방법에 대해 알아보자.

노트

  • Form이란?

  • 장고를 더욱 장고스럽게 만들어주는 주옥같은 Feature

  • 주요 역할

    • 입력 HTML 생성
    • 입력폼 값에 대한 유효성 검증 및 값 변환
    • 검증을 통과한 값들을 dict형태로 제공
  • Form 처리 방식

  • 하나의 URL에서 2가지 역할을 모두 수행
    • 빈 폼을 보여주는 역할과
    • 폼을 통해 입력된 값을 검증하고 저장하는 역할
  • myapp/models.py
from django.db import models
from django.core.validators import MinLengthValidator
from django.shortcuts import reverse


class Post(models.Model):
    title = models.CharField(max_length=100, validators=[MinLengthValidator(3)])
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def get_absolute_url(self):
        return reverse("myapp:post_detail", args=[self.pk])

    def __str__(self):
        return self.title
  • validator에 메소드명을 추가하여 유효성 검사가 가능하다.

 

  • myapp/forms.py
def post_new(request):
    form_cls = PostForm
    template_name = 'myapp/post_form.html'
    success_url = '/'

    if request.method == 'POST':
        form = form_cls(request.POST, request.FILES)
        if form.is_valid():
            post = form.save()
            return redirect(post)
    else:
        form = form_cls()

    return render(request, template_name, {
        'form': form,
    })
  • get 메소드로 요청 시 입력 폼을 반환해주고
  • post 메소드로 요청 시 입력 받은 데이터를 유효성 검사 후 저장한다. 

요약

  • 장고는 모델을 거의 필수로 생각하는 것 같다. 튜토리얼에서도 나오니까...
  • 이에 맞게 Form과 ModelForm은 입력폼을 쉽게 구현할 수 있도록 도와주는 기능이다.

 

 

'Django > Django - Form,ModelForm' 카테고리의 다른 글

6강 Form Validation  (0) 2019.09.25
5강 ModelForm  (0) 2019.09.24
4강 CSRF  (0) 2019.09.24
2강 HttpRequest와 HttpResponse  (0) 2019.09.17
1강 HTML Form  (0) 2019.09.17
Comments