Django

[Django] 10. DJANGO FORM

개발자 뭄뭄 2022. 9. 21. 00:04
반응형

1. Form에 대한 Django의 역할

  • 지금까지는 HTML form과 <input> 태그를 이용해서 사용자의 데이터를 받았다.

    → 비정상적인, 악의적인 요청이 있다는 것을 항상 생각해야 한다!

    → 항상 악의적이고, 유효하지 않은 데이터를 보내는 사용자가 있음을 명심!

  • Django는 Form을 이용해서 유효성 검사를 단순화하고 자동화할 수 있다!

2. Django Form class

  • model class를 선언하는 것과 비슷하다.
  • articles/forms.py 를 생성한 후에 다음과 같이 생성한다.
    • 파일이름이 달라도 되고, 다른 곳에 작성해도 되나, 더 나은 유지보수의 관점 그리고 관행적으로 forms.py 파일 안에 작성하는 것을 권장
from django import forms

 class ArticleForm(forms.Form):
     title = forms.CharField(max_length=20)
			# form 에서는 TextField가 없다! CharField
     content = forms.CharField()
  • articles/views.py
from .forms import ArticleForm

def new(request):
    form = ArticleForm()
    context = {
        'form':form,
    }
    return render(request, 'articles/new.html', context)
  • articles/templates/new.html
{% extends 'base.html' %}

{% block content %}
  <h1>NEW</h1>
  <form action="{% url 'articles:create' %}" method="POST">
    {% csrf_token %}
    {{  form.as_p  }}
		# 각 필드를 <p>태그로 감싸서 렌더링 하기 위해서 이렇게 작성한다.
    <input type="submit">
  </form>
  <hr>
  <a href="{% url 'articles:index' %}">뒤로가기</a>
{% endblock content %}

3. Widget

  • Textarea를 만들기 위해서 widget을 사용한다.
  • articles/forms.py
from django import forms

 class ArticleForm(forms.Form):
     title = forms.CharField(max_length=20)
			# form 에서는 TextField가 없다! CharField
     content = forms.CharField(widget=forms.Textarea())


Uploaded by N2T

반응형