#ここまでの記事
とにかくわかりやすく!Djangoでアプリ開発!ーその1ー
とにかくわかりやすく!Djangoでアプリ開発!ーその2ー
とにかくわかりやすく!Djangoでアプリ開発!ーその3ー
とにかくわかりやすく!Djangoでアプリ開発!ーその4ー
#本記事の目的
python初心者の方が、本記事を見たあとに、一人でアプリ開発できることを目的にしております。
※インストールや開発環境については記載しません
#ここまでのまとめ
ここまでの記事を元に爆速で、妻との生活記録データを作りたいと思います。
汎用的に使えるように、「とにかくわかりやすく」書いていきますので☆マークを参考にしてください。
#step1
デスクトップに移動する
$ cd Desktop
プロジェクト作る
☆プロジェクト名はお好みで
$ django-admin startproject life
サーバーの起動を確認する
$ python manage.py runserver
#step2
アプリを立ち上げる
☆アプリ名はお好みで
$ python manage.py startapp record
record配下にurls.pyを作成する
life配下のurls.pyがrecordのurls.pyを参照するようにする
☆プロジェクト配下のurls.pyが、アプリのurls.pyを参照するようにする
from django.urls import path,include
from django.contrib import admin
urlpatterns = [
path('admin/', admin.site.urls),
path('record/', include('record.urls')),
]
アプリを登録する
☆お好みで設定したものを登録
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'record'
]
言語とタイムゾーンを変更する
LANGUAGE_CODE = 'ja-JP'
TIME_ZONE = 'Asia/Tokyo'
#step3
record配下にforms.pyを作成
☆お好みのクラス名でFormの継承を作成します
☆ここで設置したい項目を増やせます
☆ChoiceFieldを使う場合は、セットで参照するタプルのリストを作成します※ここでいうnamelist/status
from django import forms
class SeikatsuRecord(forms.Form):
namelist = [
('妻','妻'),
('ひろゆき','ひろゆき'),
]
status = [
('大変悪い','大変悪い'),
('悪い','悪い'),
('普通','普通'),
('良い','良い'),
('大変良い','大変良い'),
]
date = forms.DateField(label="入力日")
name = forms.ChoiceField(label="名前",choices = namelist)
bf = forms.BooleanField(label = "朝ごはん食べた?",required = False)
lunch = forms.BooleanField(label = "昼ごはん食べた?",required = False)
dinner = forms.BooleanField(label = "夜ごはん食べた?",required = False)
eatout = forms.BooleanField(label = "外食した?",required = False)
drinking = forms.BooleanField(label = "お酒飲んだ?",required = False)
workout = forms.BooleanField(label = "運動した?",required = False)
stretch = forms.BooleanField(label = "ストレッチした?",required = False)
studying = forms.BooleanField(label = "勉強した?",required = False)
awaketime = forms.TimeField(label="起床時間")
asleeptime = forms.TimeField(label="就寝時間")
kenkobody = forms.ChoiceField(label="健康",choices = status)
#step4
Formで受け取った内容を元に、views.pyで処理を作成
☆forms.pyで書いた関数をimport
☆TemplateViewを継承してお好みのクラスを作成
from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import TemplateView
from .forms import SeikatsuRecord
class SeikatsuView(TemplateView):
def __init__(self):
self.params = {
'title':'生活記録データ',
'msg':'本日のデータを入力してね!!',
'form':SeikatsuRecord(),
'owari':'',
}
def get(self,request):
return render(request,'record/index.html',self.params)
def post(self,request):
if('bf'in request.POST):
self.params['result1'] = '食べた'
else:
self.params['result1'] = '食べてない'
bf = self.params['result1']
if('lunch'in request.POST):
self.params['result2'] = '食べた'
else:
self.params['result2'] = '食べてない'
lunch = self.params['result2']
if('dinner'in request.POST):
self.params['result3'] = '食べた'
else:
self.params['result3'] = '食べてない'
dinner = self.params['result3']
if('eatout'in request.POST):
self.params['result4'] = 'した'
else:
self.params['result4'] = 'してない'
eatout = self.params['result4']
if('drinking'in request.POST):
self.params['result5'] = '飲んだ'
else:
self.params['result5'] = '飲んでない'
drinking = self.params['result5']
if('workout'in request.POST):
self.params['result6'] = 'した'
else:
self.params['result6'] = 'していない'
workout = self.params['result6']
if('stretch'in request.POST):
self.params['result7'] = 'した'
else:
self.params['result7'] = 'してない'
stretch = self.params['result7']
if('studying'in request.POST):
self.params['result8'] = 'した'
else:
self.params['result8'] = 'してない'
studying = self.params['result8']
msg = 'こんにちは!'+request.POST['name']\
+'さん!<br>体の状態は'+request.POST['kenkobody']\
+'<br>仕事の調子は'+request.POST['workcond']\
+'<br>朝ごはんは'+bf\
+'<br>昼ごはんは'+lunch\
+'<br>夜ごはんは'+dinner\
+'<br>外食は'+eatout\
+'<br>お酒は'+drinking\
+'<br>運動は'+workout\
+'<br>ストレッチは'+stretch\
+'<br>勉強は'+studying
self.params['msg']= msg
self.params['owari']= "登録完了しました"
self.params['form'] = Seikatsurecord(request.POST)
return render(request,'record/index.html',self.params)
#step5
views.pyの処理元に、表に表示する画面を作っていきます。
record配下に
①templatesフォルダを作成
②そのなかにrecordフォルダを作成
③そのなかにindex.html作成
{% load static %}
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>{{title}}</title>
<link rel="stylesheet" type="text/css"
href="{% static 'record/css/style.css' %}"/>
</head>
<body>
<h1>{{title}}</h1>
<p>{{msg|safe}}</p>
<h1>{{owari}}</h1>
<form action= "{% url 'index' %}" method = "post">
{% csrf_token %}
{{form.as_ul}}
<input type="submit" value="送信">
</form>
</body>
</html>
#step6
cssで装飾します。
record配下に
①staticフォルダを作成
②その中にrecordフォルダを作成
③その中にcssフォルダを作成
④その中にstyle.css作成
※とりあえず変な水色
body {
color:rgb(91, 155, 238);
font-size:20pt;
}
h1 {
color:rgb(91, 155, 238);
font-size:32pt;
}
p {
color:rgb(91, 155, 238);
margin:10px;
}
a {
color:rgb(91, 155, 238);
}
#step7
ここまで作ってきたものにアクセスできるように、作成していたrecord配下にurls.pyに、以下のように記述しview.pyのクラスにアクセスできるようにします。
from django.urls import path
from .views import SeikatsuView
urlpatterns = [
path("",SeikatsuView.as_view(),name="index"),
]
#最後の確認
http://127.0.0.1:8000/record/
にアクセスしたらできているはずです!
都度読み替えたら、自分が思い描いたものができているはずです。ご不明点ご指摘あればコメントいただければと思います。
#補足
forms.pyの設定によってviews.pyでやらなければいけないこと
・CharFieldやIntegerFieldの場合:そのまま使える
・ChoiceFieldの場合:そのまま使える(formクラス内で、選択肢を作る必要あり)
・BooleanFieldの場合:views.pyで処理を書いてPOSTの内容をパラメタに渡す
#この記事はここまで