前回からの続きになります。今回は便利なクラスフォームを使用してみます。
環境
・django2.2
・python3.8
コンテンツ
まずはformsを使ってデータを送信できるようにする
新たにforms.pyを作成します。
my_friend/forms.py
1 2 3 4 5 |
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
パスも作成
1 2 3 4 5 6 7 8 9 10 11 12 |
# 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の作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
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を修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
{% 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の簡単な使い方ということで書きました。
コメントを残す