航海5 1 st miniプロジェクトレビュー(WIL)

6984 ワード

ソースコメント


アノテーションが完了したら、ハブ上に配置します.
ハブアドレス:https://github.com/stravinest/sparta_kcal_1.git

JWT


私たちのグループはJWTでログイン認証方式を実現し、使いやすいです.
payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
ただし,ログアウト後に「戻る」をクリックすると,再ログインが発生し,以下のコードで解決した.
def after_request(response):
response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
return response

API


クライアントがサーバに要求するAPI構成は、アイテムに現在電線プログラムが作成されています.その中で私が担当している部分を整理するなら
Profile Mypage

1.


@app.route('/profile')
token_receive = request.cookies.get('mytoken')
payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
 return render_template("profile.html", status=status_receive, userid=payload['id'])
プロファイルページの表示
ログインしたアイデンティティ値を受信し、renderページに送信します.
status値はindex(今日の主なカロリーページ)から取得します.
status値がoldの場合はプロファイルを入力し、newの場合はプロファイルを入力しません.

2.


@app.route('/api/send', methods=['GET'])
profiles = list(db.todayKcal.find({"myid": payload['id']}, {'_id': False}))
        if (profiles == []):
            status = 'new'
        else:
             status = 'old'
        return jsonify({'status': status})

ホームページでmypageをクリックすると、status値を判別して送信します.
status値がnewの場合

「プロファイル入力」ウィンドウが表示されます.
status値がoldの場合

プロファイルを送信すると、[プロファイル](Configuration)モディファイヤウィンドウが表示されます.

3.


@app.route('/api/profile_post', methods=['POST'])
bmiscore = math.trunc(w / (h * h) * 10000)
  bmi = ""
  if (bmiscore > 30):
      bmi = "비만"
  elif (bmiscore >= 25):
      bmi = "과체중"
  elif (bmiscore >= 19):
      bmi = "정상"
  else:
      bmi = "저체중"

履歴書を入力するときは身長体重目標カロリーを入力し、スペースを入力するとalertウィンドウが開きます.登録時にはbmi指数も算出され、一緒にDBに入る.

4.


@app.route('/api/profile', methods=['GET'])
profiles = list(db.todayKcal.find({"myid": myid_receive}, {'_id': False}))

アイデンティティー値に基づいてプロファイルを生成

5.


@app.route('/api/profile_cal', methods=['GET'])
agg_result = db.foodInfo.aggregate(
        [
            {
                "$match": {'user_info': myid_receive}
            },
            {
            "$group":
                {
                "_id":{"user_id":"$user_info",
                       "date":"$food_date"},
                 "total": {"$sum": "$food_kcal"}
                 }},
            {
                "$sort": {"date": -1}
            },


        ])

履歴書のカロリーと目標カロリーの違いを計算して噴き出します.(最も困難な部分)

6.


@app.route('/api/profile_adjust', methods=['POST'])
db.todayKcal.update_one({'myid': myid_receive}, {'$set': {'height': int(height_receive)}})
   db.todayKcal.update_one({'myid': myid_receive}, {'$set': {'weight': int(weight_receive)}})
   db.todayKcal.update_one({'myid': myid_receive}, {'$set': {'goal_cal': int(goal_cal_receive)}})
   db.todayKcal.update_one({'myid': myid_receive}, {'$set': {'bmi': bmi}})
   db.todayKcal.update_one({'myid': myid_receive}, {'$set': {'bmiscore': int(bmiscore)}})

status値がoldの場合、モディファイヤが表示され、プロファイルを変更できます.

7.


@app.route('/api/profile_food', methods=['GET'])
foodInfos = list(db.foodInfo.find({"user_info":myid_receive}, {'_id': False}).sort("now", -1))

食べ物写真出力登録IDの食べ物写真のみ出力

問題を解決する


1.gitとgithubの使用問題
Gitブランチは乱発しすぎて、最新と既存のブランチの間の衝突が頻繁すぎる.次にバックアップと初期化クローンを行い,それぞれの学習を行い,互いに共有し,Gitを理解した.
結論:プロジェクト開始時にルールを制定し、git backupとgitアップロードを徐々に行う!
2.履歴書ページのカロリー合計の問題
dbはIDと日付でカロリーを加えた値を出力する必要がありますが、find文は容易ではありません.
最初はfindでIDを探してから日付でカロリーを計算しましたが、JavaScriptではアルゴリズム的に難しいです.最終的にはモンゴル比の集約ツールで実現できます.
次の2番目の質問
受信した日付値文字列にsortが無効な現象が発生しました.そこで、新しい日付データをint形式でdbに格納し、その値today値を並べ替えます.でも役に立たないsort
しばらくのレスリングを経て、総値がsortであることを発見し、総位置でtoday値でsortを行うべきであることを発見し、avg関数でtoday値(どうせいくつかの平均値がtoday値)を抽出し、抽出したavg(today値平均)ボックスsortを食べ、成功した!(降順)3つの限度をください.せいぜい3つ目しか取れません.
> agg_result = db.foodInfo.aggregate(
       [
           {
               "$match": {'user_info': myid_receive}
           },
           {
               "$group":
                   {
                       "_id": {"user_id": "$user_info",
                               "date": "$food_date",

                               },

                       "total": {"$sum": "$food_kcal"},
                       "avg": {"$avg": "$today"}

                   }},
           {
               "$sort": {"avg": -1}
           },

           {
               "$limit": 3
           },

       ])
  • ローカルの良いサイトでawsサーバを回転し、問題が発生しました.長い間苦労してやっとアプリを始めた.pyのこの部分で、Errorは他の人を発見しました!
  • if name == 'main':
    app.run(port=500,debug=True_)
    app.run('0.0.0.0', port=5000, debug=True)
    app.run(「0.0.0.0」)は、この部分のすべてのホストが接続できる必要があることを発見し、これに基づいてアプリケーションを接続します.run(portこの部分は削除しなければなりません!!)
    4.status値の受信時に発生する問題
    ログイン後、それぞれのID値に一致する個人情報ページをポップアップします.また、そのIDに履歴書が書かれている場合と書かれていない場合は、別々に窓口を開くべきですが、この部分はstatusの状態を受け入れます.このstatusのステータスは「アドレス」ウィンドウに移動し、プロファイルページに最初にアップロードするときはすぐに取得する必要があります.しかし、履歴書ページが表示されると、そのstatus値を得るのは難しい.今考えてみれば、ジャンプ中にサーバーからのリクエストを受けていればいいのでしょうが、前ページの(メイン)値の大きなアドレスウィンドウでstatus値を取得し、その値でstatus状態を診断することができます.

    感じます


    お互いのページ間のコラボレーションは非常に重要であり、プロジェクトの前にコラボレーションをどのように計画するかが重要であることに気づきました.私だけではないチームとして、どのように私の役割を十分に100%発揮するかが重要なようです.
    プロジェクトをしているうちに些細なミスが多く、どうすればいいのか分からなかったが、結局は自分の望む機能を実現したことに満足した.