1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-03-03

#ここまでの記事
とにかくわかりやすく!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を参照するようにする

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')),
]

アプリを登録する
☆お好みで設定したものを登録

setting.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'record'
]

言語とタイムゾーンを変更する

setting.py
LANGUAGE_CODE = 'ja-JP'

TIME_ZONE = 'Asia/Tokyo'

#step3

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

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を継承してお好みのクラスを作成

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作成

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作成
※とりあえず変な水色

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

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/
にアクセスしたらできているはずです!

スクリーンショット 2019-03-04 0.07.34.png

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

#補足

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

#この記事はここまで

続きはこちら→[Python]とにかくわかりやすく!Djangoでアプリ開発!ーその5ー

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?