スポンサーリンク
Djangoの学習 フォームの使い方

【Python】クラスベースと関数ベースの書き方views.py・forms.py【Django】Djangoの学習 機能ごとの書き方の例
https://prcmyself.com/first-django-step-2
1.ビ...
フォームについて
フォームには2つタイプがある。
一つは、django.forms.Formクラスを継承したやり方。
これは、forms.pyに直接フォームの定義を記載する。
直接記載するので、forms.pyに定義づけは必要だけど、データベースとは関係なので、モデルファイルは作らなくてもOKなやり方。
もう一つは、django.forms.ModelFormクラスを継承したやり方。
これば、models.pyに定義を記載して、それを元にフォームを設定するやり方。
これは、モデルクラスを作ってからそれを利用するやり方。
フォームへの書き方はカラム名を書くだけで、シンプルだけど、データベースの設定やモデルファイルを作成する必要がある。
関数ベース シンプルに一行だけ
from django import forms
class ContactForm(forms.Form):
name = forms.CharField(label ='お名前', max_length="40", required=False)def contact(request):
params = {
'name':'お名前は?',
'form':ContactForm(),
}
if (request.method =='POST'):
params['name'] = request.POST['name'] + 'さんですね'
return render(request,'contact.html',params){% extends 'base.html' %}
{% block body-contents %}
<h2>{{name}}</h2>
<form action="{% url 'contact' %}" method="POST">
{% csrf_token %}
{{form}}
<input type="submit" value='送信'>
</form>
{% endblock %}from django.urls import path
from . import views
urlpatterns = [
path('contact',views.contact,name='contact'),
]
ブラウザで表示 入力前
ブラウザで表示 入力後
関数ベース 計算してみる
from django import forms
class ContactForm(forms.Form):
name = forms.CharField(label ='お名前', max_length="40", required=False)
age = forms.IntegerField(label = '年齢')
years = forms.IntegerField(label = '何年後か')from django.shortcuts import render
from django.http import HttpResponse
from django.shortcuts import redirect
from django.views import generic
from .forms import ContactForm
def contact(request):
params = {
'name':'お名前は?',
'age':'年齢は?',
'years':'〇年後何歳か計算します',
'ans':'',
'form':ContactForm(),
}
if (request.method =='POST'):
params['name'] = request.POST['name'] + 'さん'
params['age'] = request.POST['age'] + '歳ですね'
params['years'] = request.POST['years'] + '年後は'
ans = int(request.POST['age']) + int(request.POST['years'])
params['ans'] = str(ans)+'歳ですね'
return render(request,'contact.html',params){% extends 'base.html' %}
{% block body-contents %}
<h2>{{name}}</h2>
<h2>{{age}}</h2>
<h2>{{years}}</h2>
<h2>{{ans}}</h2>
<form action="{% url 'contact' %}" method="POST">
{% csrf_token %}
{{form}}
<input type="submit" value='送信'>
</form>
{% endblock %}from django.urls import path
from . import views
urlpatterns = [
path('contact',views.contact,name='contact'),
]
ブラウザで表示 入力前

ブラウザで表示 入力後

総括
もう一つのクラスベースは、モデルファイルを作ってマイグレーションとかしないといけないので、長くなるから別の記事でやる。
関数ベースの方は、設定したらそのまま使えるので、気軽に使えるイメージだった。
あまりまだ理解は深まっていないけど、とりあえずそんな感じ。











