2.FreshCode-ユーザー認証による商品管理API


課題項目の概要


チャレンジレコードライブラリリンクの発行
APIドキュメントリンク

課題の内容


  • ログイン機能

  • ユーザ認証/認証の実装

  • 商品の追加/変更/削除はadmin権限を持つユーザーのみ可能です
  •     - admin 예시
        	EMAIL: [email protected]
        	PASSWORD: admin
            ROLE : [admin]

  • 商品管理機能

  • 商品の詳細と完全なリストを表示

  • 一般ユーザーと管理者権限の分離

  • ユニットテスト

  • データベース使用RDBMS

  • ログイン機能はJWT認証を採用

  • SwagerまたはPostmanを使用したAPIテスト
  • 開発したAPIと機能に大きな違いはないが,ユーザ権限の設定は初めてである.
    まず,モデリング時にusersテーブルにrole列を追加してadminとuserを区別する方法を考えた.

    チーム構造と職責


  • バックエンド×6

  • 私の3つの機能実装チーム->DBモデリング、ログイン、商品管理、ユニットテスト、Postmanドキュメント

  • 3名の配置チーム->開発と配置の優先パラメータ、READMEの作成

  • 6人で課題を分担すると、担当する役が少なすぎて、かえって効率が悪いと思います.また,各課題は個人が把握し成長できる部分に集中している.そのため、プロジェクトは大きく2つの部分に分けられ、3人で1つのチームを構成し、対位プログラミングで行われます.

  • デプロイメントグループの担当コンポーネントは少ないかもしれませんが、aws、dockerをさらに学ぶ機会にすることにしました.どうせ毎週2つの課題をやっているので、交代で役を受ければいいと思います.
  • テクノロジースタックの使用

  • Back-End : Python, Django Framework, MySQL
  • Deploy : AWS EC2
  • ETC : Git, Github, Postman
  • 開発プロセス


    初日-モデリングと初期設定



  • 機能を実現するために必要な最低限のモデリングを記述した.商品には様々な選択肢やラベルがあることを前提に関係を設定しています.

  • Tagの場合、実際のサイトでは、商品ごとに1つしか見られず、カテゴリと区別され、フィルタリングの役割を果たしています.
    そのため、1つの商品に複数のラベルを付けることができる関係が設定されています.

  • Usersテーブルのroleフィールドにはadminまたはuserという値を含めることができます.

  • 初期設定時には、SECRET_KEYDATABASESの情報を環境変数に設定します.
    ->デプロイの場合、デバッグモードと許可されているホストのセクションを変更する必要があります.次に、デプロイの設定を個別に管理する必要があります.
  • 2日目-製品管理機能の実装


  • チームメンバーとDjango appとviewの設計を事前に検討し、SignInView、ProductView、ProductDetailViewを3つの部分に分け、それぞれ開発を担当した.私が担当している部分はProductDetailViewで、商品の詳細の表示、修正、削除機能を提供しています.

  • 一番悩んでいる部分は商品修正機能です.HTTP patchメソッドリクエストを受信し、djangoクエリーセットupdateメソッドで実装しようとします.修正するデータのみbodyに書き込む場合は、更新が必要です.

  • データ内のすべてのキー値がgetを受信していない場合は、defaultをNoneに設定しますか?
    ->状況の数を考慮して、実装できますが、コードが長すぎます.

  • updateのパラメータとして、**データを加えて実現します.
    ->dict形式のデータをkey=value形式で開き、キーワードパラメータに入れます.
    ->以前のプロジェクトでfilter機能を実現する方法により、コード長を著しく低減できます.
  • ユーザー関連機能を実装したチームメンバーはadmin decoratorを記述し、認証と認可機能を実現するために関数に貼り付けた.
  • 感じと改善


    チームプロジェクト


  • 課題内容自体はそれほど難しくありませんが、短期間で成果を出す部分が一番難しいチームメンバーが多いです.モデリングからそれぞれの意見があり,機能を実現する方法も必然的に異なる.一人で忙しくて、最後に他のチームメンバーに協力するために修正したことがあります.開発が速くて遅い人もいるかもしれません.格差を縮める方法と努力を考えるうちに、チームワーク能力が育成されたようだ.

  • 単純に開発を行うのと開発チームで協力するのとは異なることが理解できる.一人でもっと勉強して、もっと貢献する態度は今回の課題と合わない.他の同僚と力を合わせ、共に成長し、共に学ぶという気持ちで、残りの課題に直面しなければならない.
  • になってから、他のチームメンバーのコードをよく見て、彼らが私とは異なる会議を使っていることを知りました.一見大差はないが、一つのプロジェクトに別のプロジェクトを適用すると、今後のメンテナンスにもよくない.今度はチームミーティングをもっと明確にします.また、他のチームメンバーが作成したコードもいつでも参照して参照してください.
  • 以前習った技能を応用する


  • NoSleepPlaceチームプロジェクトでは,Dictionary理解を利用したフィルタリング機能を実現した.この過程で**kwagsパラメータとpacking,unpackingの概念を学び,今回は応用できる.
    JSONのようなディック形式のデータオブジェクトをDjangoクエリセットメソッドのパラメータとして使用する場合、それを**dataに入れ、そのデータを開き、key=valueの形式で入力します.
  • 位の内容はこれからも積極的に利用して、完全に私のものになります.新しい技術を学ぶには、使い方だけでなく、原理や概念もよく理解してこそ、次回に積極的に応用できる.機能の実現だけに注目するのではなく、プロジェクトが終わった後でも新しい学習の概念をまとめ、振り返り、再設計しなければならない.