### フォームクラス
Djangoに予め用意されているフォームクラスを使う
– アプリケーションフォルダ内にforms.pyを作成する
/hello/forms.py
1 2 3 4 5 6 | from django import forms class HelloForm(forms.Form): name = forms.CharField(label = 'name' ) mail = forms.CharField(label = 'mail' ) age = forms.IntegerField(label = 'age' ) |
– Formクラスはform.Formというクラスを継承している
– クラス内には用意するフィールドを変数として用意する
– forms.CharFieldはテキスト、forms.IntegerFieldは整数値
### views.py
/hello/views.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from django.shortcuts import render from django.http import HttpResponse from .forms import HelloForm def index(request): params = { 'title' : 'Hello' , 'message' : 'your data' , 'form' : HelloForm(), } if (request.method = = 'POST' ): params[ 'message' ] = 'name: ' + request.POST[ 'name' ] + \ "<br>mail: " + request.POST[ 'mail' ] + \ "<br>age: " + request.POST[ 'age' ] params[ 'form' ] = HelloForm(request.POST) return render(request, 'hello/index.html' , params) |
– 初期値は’form’: HelloForm()とし、送信後はparams[‘form’] = HelloForm(request.POST)として上書きしている
### index.html
/hello/templates/hello/index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | {% load static %} <! DOCTYPE html> < html lang = "en" > < head > < meta charset = "UTF-8" > < title >{{title}}</ title > < link rel = "stylesheet" href = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" crossoorigin = "anonymous" > </ head > < body class = "container" > < h1 class = "display-4 text-primary" >{{title}}</ h1 > < p class = "h5 mt-4" >{{message|safe}}</ p > < form action = "{% url 'index' %}" method = "post" > {% csrf_token %} {{ form }} < input class = "btn btn-primary" type = "submit" value = "click" > </ form > </ body > </ html > |
– formの具体的内容は既に作成済の為、{{ form }}のみ記載
– {{messsage|safe}}はエスケープ処理なし
### urls.py
/hello/urls.py
1 2 3 | urlpatterns = [ path(' ', views.index, name=' index'), ] |