どうもjackです。
8月からPythonをメインにエンジニア業務に従事することになりまして。
諸事情により12月までに7キロの減量を目標に生きてる駆け出しエンジニアです。
今回は表題の通りDjangoのform機能を使ってBMI測定を行います。
ちなみに私の開発環境は以下となっています。
- Python 3.6.7
- Django 2.2.3
- macOS
では、早速。
django-admin startproject qiita
をターミナルにて実行してアプリを作成!
cd qiita
作成したディレクトリへ移動。
python3 manage.py startapp bmi
上記にてbmiアプリを作成。
qiitaディレクトリにあるsettings.pyのINSTALLED_APPSにbmiを追記。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bmi',
qiitaディレクトリにあるurls.pyの編集を行います。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('bmi/', include('bmi.urls')),
]
合わせてbmiディレクトリにurls.pyのファイルを作成しておきましょう。
urls.pyの編集は後ほど。
├── qiita
│ ├── __pycache__
│ ├── _init_.py
│ ├── setting.py
│ ├── urls.py
│ ├── views.py
│ └── wsgi.py
├── bmi
│ ├── migrations
│ ├── _init_.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py ←これ
│ └── views.py
└── manage.py
今回のbmiの計算に必要な数値は身長と体重の2つ。
この2つの値をformで受け取る為にまずはbmiディレクトリにforms.pyを作成。
├── qiita
│ ├── __pycache__
│ ├── _init_.py
│ ├── setting.py
│ ├── urls.py
│ ├── views.py
│ └── wsgi.py
├── bmi
│ ├── migrations
│ ├── _init_.py
│ ├── admin.py
│ ├── apps.py
│ ├── forms.py ←これ
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
└── manage.py
んで持ってこのforms.pyを編集します。
from django import forms
class BmiForm(forms.Form):
weight = forms.IntegerField(label='weight')
height = forms.IntegerField(label = 'height')
ではこの作成したformをviewにて関数を定義していきます。
from django.shortcuts import render
from .forms import BmiForm
# Create your views here.
def bmi(request):
params = {
'title' :'BMI',
'msg': 'enter your score',
'form': BmiForm()
}
if (request.method=='POST'):
msg = int(request.POST['weight']) / (int(request.POST['height'])/100 )**2
params['msg'] = '{:.2f}'.format(msg)
params['form'] = BmiForm(request.POST)
return render(request, 'bmi/bmi.html', params)
paramsの部分は後ほど作成するhtmlに値を渡すための部分になります。
入力フォームを埋め込むhtmlを格納するtemplatesディレクトリを作成します。
├── qiita
│ ├── __pycache__
│ ├── _init_.py
│ ├── setting.py
│ ├── urls.py
│ ├── views.py
│ └── wsgi.py
├── bmi
│ ├── migrations
│ ├── templates
│ │ └── bmi
│ │ └── bmi.html ←ここ
│ ├── _init_.py
│ ├── admin.py
│ ├── apps.py
│ ├── forms.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
└── manage.py
そしてbmi.htmlを書いていきます。
<!DOCTYPE html>
<html lang="ja" dir="ltr">
<head>
<meta charset="utf-8">
<title>{{title}}</title>
</head>
<body>
<h1>{{title}}</h1>
<p>{{msg}}</p>
<table>
<form action="{% url 'bmi' %}" method="post">
{% csrf_token %}
{{form}}
<tr>
<td></td><td><input type="submit" name="" value="send"></td>
</tr>
</form>
</table>
</body>
</html>
最後にurls.pyを編集して終了です。
from django.urls import path, include
from . import views
urlpatterns = [
path('', views.bmi, name='bmi'),
]
ターミナルを起動させてローカルサーバーを立ち上げましょう。
python3 manage.py runserver
こういった表示が出れば完成です!!
実際に入力すると、、、
でたーーーーー!!!!
ちなみに標準は22らしいです。泣
ではさよならさよならさよなら。