航海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
},
])
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%発揮するかが重要なようです.
プロジェクトをしているうちに些細なミスが多く、どうすればいいのか分からなかったが、結局は自分の望む機能を実現したことに満足した.
Reference
この問題について(航海5 1 st miniプロジェクトレビュー(WIL)), 我々は、より多くの情報をここで見つけました https://velog.io/@stravinest/1stminiproject-회고テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol