Skip to content

aohana-AO/inuneko2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

65 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

logo (37)


image

Overview

  • 一日に与える食事量をご飯のカロリー量から計算する適正食事量計算機能。
  • 外観と触感で大まかな太り具合を5段階で判断するBCS計算機能。
  • ペットの毎日の様子を写真付きで記録することのできるCRUD機能。
  • 犬と柴犬の写真をランダムで表示させる機能。

以上等をまとめdjangoでwebアプリの形にしました。

サイトURL

https://inunekohealth.up.railway.app/

Author

Requirement

base

  • Python==3.9
  • Django==4.1.4
  • PyCharm
  • visual studio code
  • Windows10,11

CRUD周り

  • django-allauth==0.51.0
  • django-widget-tweaks==1.4.12

デプロイ

  • gunicorn==20.1.0
  • whitenoise==6.2.0
  • Railway

API処理

  • requests==2.28.1

フロント

  • js
  • jQuery
  • BootStorap5.0
  • FontAwesome

data

Description

適性食事量計算、BCS計算

・外観と触感で大まかな太り具合を5段階で判断するBCSを計算できる

・一日に与える食事量をご飯のカロリー量から計算する

image

image

image

CRUD機能

・ログイン、ログアウト、サインイン機能

image

・タイトルと文で記録を残せる日記機能

image

・ログイン時、投稿一覧をindex下部に表示

image

image

犬ギャラリー

・犬 (犬の写真をランダムで表示する。たまに狐)

image

・柴犬 (柴犬の写真をランダムで表示する)

image

プログラムの規模

image

尽力した点

動物病院の情報など参考にBCS計算・適性食事量計算のロジックをプログラムに落とし込んだ。

https://github.com/hiraku0203/dog-cat_kcal/blob/main/BCS.py

 BCS = str()
    
 def animal_bcs(BCS) :

    # 犬か猫か判定
    q1 = int(input("犬なら1、猫なら2を入力: "))

    # 犬🐶
    if q1 == 1 :
        # 肋骨が触れるかどうかで第一段階判断
        rib = int(input("肋骨は触れるか。触れる場合は1を、触れないのなら2を入力: "))

        if rib == 1 :
            # 犬の外観から判断
            look = int(input("肋骨は外観からわかるほどに浮き出ているか。浮き出ているなら1、見えないようなら2を入力: "))

            # 肋骨浮き出るくらい痩せてる
            if look == 1 :
                spine = int(input("脊椎と骨盤も外観からわかり、触っても脂肪がわからないほどに痩せているかどうか。Yesなら1を、Noなら2を入力: "))
                
                if spine == 1 :
                    BCS = "非常にやせ細っています。健康状態や理想体重などの詳しい状態は獣医師に相談して下さい"
                    return BCS
                    
                elif spine == 2 :
                    BCS = "痩せています。理想体重などを獣医師と相談"
                    return BCS

            # そうでもないとき
            elif look == 2 :
                const = int(input("犬を上から見てくびれに注目してください。くびれがはっきりと確認できるのなら1を、すこしある又はあまり見えない場合は2を、全く確認できないなら3を入力: "))
                
                # くびれで判断
                if const == 1 :
                    abdomen = int(input("そのくびれはどの程度か。肋骨あたりからくびれができていて痩せていると感じるのなら1を。肋骨の後ろ、腰のあたりがくびれている場合は2を入力: "))
                    
                    if abdomen == 1 :
                        BCS = "やや瘦せています。理想体重などを獣医師と相談。"
                        return BCS
                    
                    elif abdomen == 2 :
                        BCS = "理想的な体重。おやつのあげすぎなどに注意"
                        return BCS
                
                elif const == 2 :
                    abdomen = int(input("犬を横から見る。そのとき胸からおなかのほうにかけて吊り上がっていっているか。吊り上がっているなら1を、吊り上がっておらず平坦なら2を入力: "))
                    
                    if abdomen == 1 :
                        BCS = "やや肥満気味。適切な運動や食事管理を。おやつのあげすぎには注意"
                        return BCS
                    
                    elif abdomen == 2 :
                        BCS = "肥満気味。適切な運動と食事管理を。おやつはあげたぶんだけ主食をへらす"
                        return BCS

                elif const == 3 :
                    body = int(input("犬を横から見る。そのときむねからおなかのほうにかけて平坦なら1を、脂肪が垂れ下がるくらいなら2を: "))
               
                    if body == 1 :
                        BCS = "肥満気味。適切な運動と食事管理を。おやつはあげたぶんだけ主食をへらす"
                        return BCS

                    elif body == 2 :
                        BCS = "かなりの肥満。適切な運動と食事管理を。本格的なダイエットが必要な場合は獣医師に相談"
                        return BCS

        elif rib == 2 :
            body = int(input("犬を横から見る。そのときむねからおなかのほうにかけて平坦なら1を、脂肪が垂れ下がるくらいなら2を: "))
           
            if body == 1 :
                        BCS = "肥満気味。適切な運動と食事管理を。おやつはあげたぶんだけ主食をへらす"
                        return BCS

            elif body == 2 :
                        BCS = "かなりの肥満。適切な運動と食事管理を。本格的なダイエットが必要な場合は獣医師に相談"
                        return BCS


    # ねこ(=^・・^=)
    elif q1 == 2 :

        # 肋骨を触って判断
        rib_touch = int(input("肋骨は簡単に触れるか。Yes=1,No=2: "))
        
        if rib_touch == 1 :
            
            # 外観で
            rib_look = int(input("肋骨は外から見てわかるか。Yes=1,No=2: "))
        
            if rib_look == 1 :
        
                # くびれで
                consta = int(input("肋骨の後ろ、腰のあたりのくびれは深いか。Yes=1,No=2: "))
        
                if consta == 1 :
        
                    body = int(input("横から見て腹部はかなり吊り上がっているか。Yes=1,No=2: "))
        
                    # 結果
                    if body == 1 :
                        BCS = "かなり痩せている。必要なら獣医師に相談"
                        return BCS
                   
                    elif body  == 2 :
                        BCS = "痩せている。"
                        return BCS
        
                elif consta == 2 :
                    BCS = "やや瘦せている。"
                    return BCS

            # くびれの深さで
            elif rib_look == 2 :
                consta = int(input("腰はわずかにでもくびれているか。Yes=1,No=2: "))
        
                if consta == 1 :
                    body = int(input("横から見て腹部の吊り上がりはどの程度か。深いなら1、浅いなら2: "))

                    # 結果
                    if body == 1 :
                        BCS = "やや痩せている。"
                        return BCS

                    elif body == 2 :
                        BCS = "理想体重。"
                        return BCS
                    
                # おなかの丸さで
                elif consta == 2 :
                    body = int(input("横から見ておなかの丸みはどの程度か。やや丸いなら1、まん丸なら2: "))

                    # 結果
                    if body == 1 :
                        BCS = "やや太っている。"
                        return BCS

                    elif body == 2 :
                        body2 = int(input("脇腹のひだは歩くとどれくらい揺れるか。揺れている程度なら1、盛んに揺れるなら2: "))
                        if body2 == 1 :
                            BCS = "太っている。"
                            return BCS

                        elif body2 == 2 :
                            BCS = "かなり太っている。"
                            return BCS


        # 肋骨が触れなかった場合
        elif rib_touch == 2:
            body2 = int(input("脇腹のひだは歩くとどれくらい揺れるか。揺れている程度なら1、盛んに揺れるなら2: "))
            
            if body2 == 1 :
                BCS = "太っている。"
                return BCS

            elif body2 == 2 :
                BCS = "かなり太っている。"
                return BCS


        
            
bcs = animal_bcs(BCS)

print(bcs)

Herokuの有料化、GCP・AWSの個人利用の敷居の高さからデプロイが難しくなっていた点を、Railwayの使用で対処した。

※RailwayへのdjangoデプロイはHerokuへのデプロイの設定を少し弄るだけで可能!

image

今後について

  • Railwayの使用は実際運用の面で制限が多いため、今後このプロダクトを長期運用していく場合は有料プランもしくは他サービスに乗り換えることを検討するべき。
  • フロントエンドの幅調整の点で変更しきれてない位置のずれがあったため、この点を改善する必要がある。
  • BCS、適性食事量計算の計算結果を保存機能はつける

Reference