[Python]とにかくわかりやすく！Djangoでアプリ開発！ー中間まとめ[1-4]ー

#ここまでの記事
[とにかくわかりやすく！Djangoでアプリ開発！ーその１ー](https://qiita.com/hiroyuki_mrp/items/8b2b78e066f35edbfbfd)
[とにかくわかりやすく！Djangoでアプリ開発！ーその2ー](https://qiita.com/hiroyuki_mrp/items/18c790034afe83541160)
[とにかくわかりやすく！Djangoでアプリ開発！ーその3ー](https://qiita.com/hiroyuki_mrp/items/a34a897be14d09082461)
[とにかくわかりやすく！Djangoでアプリ開発！ーその4ー](https://qiita.com/hiroyuki_mrp/items/8aa59ede3b31fd8dddb8)


#本記事の目的
python初心者の方が、本記事を見たあとに、一人でアプリ開発できることを目的にしております。
※インストールや開発環境については記載しません

#ここまでのまとめ
ここまでの記事を元に爆速で、妻との生活記録データを作りたいと思います。
汎用的に使えるように、「とにかくわかりやすく」書いていきますので☆マークを参考にしてください。

#step1
デスクトップに移動する

```terminal
$ cd Desktop
```
プロジェクト作る
☆プロジェクト名はお好みで

```terminal
$ django-admin startproject life
```
サーバーの起動を確認する

```terminal
$ python manage.py runserver
```
#step2

アプリを立ち上げる
☆アプリ名はお好みで

```terminal
$ python manage.py startapp record
```

record配下にurls.pyを作成する
life配下のurls.pyがrecordのurls.pyを参照するようにする
☆プロジェクト配下のurls.pyが、アプリのurls.pyを参照するようにする

```python:life/urls.py
from django.urls import path,include
from django.contrib import admin

urlpatterns = [
    path('admin/', admin.site.urls),
    path('record/', include('record.urls')),
]
```
アプリを登録する
☆お好みで設定したものを登録

```python:setting.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'record'
]
```
言語とタイムゾーンを変更する

```python:setting.py
LANGUAGE_CODE = 'ja-JP'

TIME_ZONE = 'Asia/Tokyo'
```

#step3

record配下にforms.pyを作成
☆お好みのクラス名でFormの継承を作成します
☆ここで設置したい項目を増やせます
☆ChoiceFieldを使う場合は、セットで参照するタプルのリストを作成します※ここでいうnamelist/status


```python:forms.py
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を継承してお好みのクラスを作成


```python:views.py
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作成

```html: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>
```

#step６

cssで装飾します。

record配下に
①staticフォルダを作成
②その中にrecordフォルダを作成
③その中にcssフォルダを作成
④その中にstyle.css作成
※とりあえず変な水色

```css:stlye.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のクラスにアクセスできるようにします。

```python:record/urls.py
from django.urls import path
from .views import SeikatsuView

urlpatterns = [
    path("",SeikatsuView.as_view(),name="index"),
]
```

#最後の確認

http://127.0.0.1:8000/record/
にアクセスしたらできているはずです！

<img width="333" alt="スクリーンショット 2019-03-04 0.07.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/241505/a8195074-b2fb-1956-9b76-602ff968a2bb.png">


都度読み替えたら、自分が思い描いたものができているはずです。ご不明点ご指摘あればコメントいただければと思います。

#補足

forms.pyの設定によってviews.pyでやらなければいけないこと
・CharFieldやIntegerFieldの場合：そのまま使える
・ChoiceFieldの場合：そのまま使える(formクラス内で、選択肢を作る必要あり) 
・BooleanFieldの場合：views.pyで処理を書いてPOSTの内容をパラメタに渡す

#この記事はここまで

続きはこちら→[[Python]とにかくわかりやすく！Djangoでアプリ開発！ーその5ー](https://qiita.com/hiroyuki_mrp/items/344c3b3ce44564dad3a4)