航海99開発ログ-ミニプロジェクト(2)


🧚プロジェクトの概要🧚‍



プロジェクト名:IntroDog


[4 DAY-MINI PROJECT]
「IntroDog」は、お客様と意見を交換できるサイトです.
ペットの犬を飼っているときに起こる問題、日常生活などの些細なことは他の人と交流することができます!

📅 制作期間&MYDOGチームメンバーの紹介👨‍


(制作時間:📆 2022.03.07~ 2022.03.10 )





FRONT-END
BACK-END
FRONT-END
レイアウト構成+ホーム+検索機能により、包括的なフロントエンドタスクを実現
COMMUNITYページ+コメントの作成/削除+コメントの作成/削除により、全面的なバックエンドタスクを実現
ログイン+会員加入機能で全面的なフロントエンド任務を実現

必須要件\

  • jinja 2テンプレートエンジンを使用してサーバ側で
  • をレンダリング
  • JWT認証によるログイン
  • 📷 デモビデオ📷



    🛠 使用するテクノロジー🛠


    -言語

    HTML, CSS, JAVASCRIPT, PYTHON

    -フレーム/プラットフォーム/ライブラリ

    JQUERY, BOOTSTRAP, BULMA, JWT, JINJA, FLASK

    -コラボレーションツール

    GITHUB, GIT, NOTION, DISCORD

    -データベース

    MONGO DB

    -管理

    AWS

    -編集

    PYTHARM, VISUALSTUDIO
    航海996期Dクラス(深化コース)ミニプロジェクトを見に行きます
    私たちのグループは8組です.

    ▼▼▼実施する機能概要


    1.トークン認証の実施

    
    # 토큰 인증 함수
    def auth_token(page):
        # 토큰 받아오기
        token_receive = request.cookies.get('mytoken')
        # index 페이지는 예외 처리
        if page == 'index.html':
            # 토큰이 없으면 index 페이지로 이동
            if token_receive is None:
                return render_template('index.html')
            else:
                # 토큰이 있으면
                try:
                    # 토큰을 HS256 방식으로 복호화
                    payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
                    # 복호화한 토큰의 payload의 id와 db에 있는 id 비교
                    user_info = db.user.find_one({"id": payload['id']})
                    # 인증 성공시 아이디, 프로필사진, 닉네임 리턴
                    return render_template(f'{page}', userId=user_info["id"], profileImg=user_info["profileImg"], nickname=user_info["nickname"])
                # 만료된 토큰시
                except jwt.ExpiredSignatureError:
                    return render_template(f'{page}')
                # 복호화 오류시
                except jwt.exceptions.DecodeError:
                    return render_template(f'{page}')
    
        else:
            # 토큰이 없으면 로그인 페이지 이동
            if token_receive is None:
                return make_response(redirect(url_for("login", errorCode="0")))
            else:
                # 토큰이 있으면
                try:
                    # 토큰을 HS256 방식으로 복호화
                    payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
                    # 복호화한 토큰의 payload의 id와 db에 있는 id 비교
                    user_info = db.user.find_one({"id": payload['id']})
                    # 인증 성공시 아이디, 닉네임 json 형식으로 설정
                    user_data = {
                        'userId': user_info['id'],
                        'nickname': user_info['nickname']
                    }
                    # return 타입 설정 
                    response = app.response_class(
                        response=json.dumps(user_data),
                        mimetype='application/json'
                    )
                    return response
                # 만료된 토큰시
                except jwt.ExpiredSignatureError:
                    return make_response(redirect(url_for("login", errorCode="1")))
                # 복호화 오류시
                except jwt.exceptions.DecodeError:
                    return make_response(redirect(url_for("login", errorCode="2")))
                    

    2.投稿の登録、変更、削除


    https://github.com/jinsDevelopment/myDog/blob/main/app.py

    3.コメントの登録、削除


    https://github.com/jinsDevelopment/myDog/blob/main/app.py

    後記


    航海99が本格的に始まった.新しいメンバーに声をかける暇もなく、ミニプロジェクトのアイデアをそのまま受け入れ、計画、設計を行い、4日間でプロジェクトを完成させ、成果を披露しました.元気もなく完成した時は嬉しかったが、もっと残念な思いを残した.

    メリット


    短い時間で、チームメンバーと一日中コミュニケーションをとり、すぐに親密になり、お互いに意見を交換することで、完璧な場所と良い考えを分かち合い、プロジェクトの完成度を高めました.また、Gitを正しく処理したことはありませんが、Gitについてよく知っているチームメンバーがいて、Gitをスムーズに提出したりプッシュしたりするのに役立ちます.そして、これまでのデザイン作業もたくさんして、チームメンバーにも助けられて、よくできました.

    残念なことに。


    4日間で、一つのプロジェクトを完成させることは、開発を始めたばかりの人にとってもっと難しいことです.どこからデータを入手すればいいのか、バックエンドディレクトリ構造、効率的なDB設計が多くできていますが、スムーズに進んでいるような気がします.加えて講義を聞きながら進めなければならないので、時間的に緊迫するしかないのが残念です.

    補足すべき点


  • pythonファイル構造をbluentに分けてrouterパス設定を試みましたが、python flask構造を習得したばかりなので残念ながら失敗しました.これらの方面について、私はもっと勉強するつもりです.

  • jwtトークンのapiを呼び出すたびに自動的に呼び出す方法があるかどうかを知るべきだと思います.

  • gitの使い方をさらに学ぶ必要があります.