前回からの続きになります。今回は便利なクラスフォームを使用してみます。

環境
・django2.2
・python3.8
コンテンツ
まずはformsを使ってデータを送信できるようにする
新たにforms.pyを作成します。
my_friend/forms.py
from django import forms # Formクラスはforms.Formのクラスを継承して作成する
class HelloForm(forms.Form):
name = forms.CharField(label='name')
mail = forms.CharField(label='mail')
age = forms.IntegerField(label='age')
my_friend/urls.py
パスも作成
# from django.urls import path
from django.conf.urls import url
# from . import views
from .views import HelloView
app_name = 'my_friend'
urlpatterns = [
# path('', views.index, name='index'),
# path('', views.form, name='form'),
url(r'', HelloView.as_view(), name='index'),
]
my_friend/views.py
viewsの作成
from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import TemplateView
from .forms import HelloForm
class HelloView(TemplateView):
def __init__(self):
self.context = {
'title': 'Hello',
'message': 'your data:',
'form': HelloForm()
}
def get(self, request):
return render(request,'my_friend/index.html', self.context)
def post(self, request):
# msg = 'あなたは <b>' + request.POST['name'] + '(' + request.POST['age'] + \
# ') </b>さんです。<br>メールアドレスは <b>' + request.POST['mail'] + \
# '</b> ですね。'
msg = 'OK'
self.context['message'] = msg
self.context['form'] = HelloForm(request.POST)
return render(request, 'my_friend/index.html', self.context)
def index(request):
# get時
if request != 'POST':
context = {
'title': '友達のデータ',
'message': 'お名前は?',
'form': HelloForm(),
}
if request.method == 'POST':
context['message'] = '名前:' + request.POST['name'] + \
'<br>メール:' + request.POST['mail'] + \
'<br>年齢:' + request.POST['age']
context['form'] = HelloForm(request.POST)
return render(request, 'my_friend/index.html', context)
return render(request, 'my_friend/index.html', context)
def form():
msg = request.POST['msg']
context = {
'title': 'Hello/Form',
'message': 'こんにちは' + 'msg' + 'さん',
}
return render(request, 'my_friend/index.html', context)
my_friend/templates/my_friend/index.html
indexを修正します。
{% load static %}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>{{title}}</title>
<link rel="stylesheet" href="{% static 'my_friend/css/style.css' %}" />
</head>
<body>
<h1>{{title}}</h1>
<p>{{message|safe}}</p>
<table>
<form action="" method="post">
{% csrf_token %}
{{ form.as_table }}
<tr><td><input type='submit' value="click"></td></tr>
</form>
</table>
</body>
</html>
使ってみる
こちらに適当に数値を入れてclickします

うまく反映されました。値の扱いをできるようにしただけなので、DBには保存はされていません。
ちなみに値が空欄のままclickを押すと、このようにエラーが出現します。

以上、formsとmodelsの簡単な使い方ということで書きました。



コメントを残す