この演習は、インタラクティブな方法で基本的なバックエンド/サーバーサイドプログラミングに精通し、最新のPython/Flask環境で快適に開発できるようにすることを目的としています。
以下を読むと、API/書き込みサーバーサイドコードの開発と、より大きなWebアプリケーションのコンテキストでどのように適合するかについて、全体像の感覚が得られます。
このプロジェクトは複数の部品に分割されます。このプロジェクトを終了したら、以下の指示に従って送信する必要があります。
この演習は、9月17日月曜日の午後11時59分より前に予定されています。 React-Execiseでの作業を含めて合計10時間以上費やした場合は、あなたが持っているものを提出してください!
ご質問については、お気軽に[email protected]にメールしてください。
MacおよびWindowsのインストール手順。
インストールを含むPython上のもののためのもう1つの優れたリソースは、Pythonのヒッチハイカーガイドです。
端末で次のコマンドを実行して、正しいバージョンがあるかどうかを確認してください。
python3 -V
pip3 -V
pipenv --version
まず、このリポジトリをフォークします。右上のフォークボタン。これが行うことは、このリポジトリをアカウントにコピーすることです。これで、 <yourusername>/flask-exerciseという名前のリポジトリが必要です。
このように見えるはずです(私のユーザー名はTKO22です): 
次に、このリポジトリをクローンします(「クローンまたはダウンロード」という緑色のボタンをクリックし、HTTPを選択し、場所<url>コピーして貼り付けて貼り付けてください)。
$ git clone <url>
$ cd flask-exercise
次に、仮想環境をセットアップし、このアプリを実行するのに必要なPython依存関係をインストールします。 Pipfileとpipfile.lockを考慮して、Pipenvを使用します。 PipfileはVirtualenvを使用します。これは、他のPythonプロジェクトから分離された仮想Python環境であり、同じマシンの他のPythonプログラムに干渉したり影響を受けたりすることができません。したがって、同じパッケージまたは異なるPythonバージョンの異なるバージョンを実行できます。
pipenv install --skip-lock
このサーバーを開始するには、この仮想環境にいる必要があります。それをするために:
pipenv shell
次に、サーバーを起動するには:
(backend-exercise-o4dc6oDL)$ python app.py
注:これは端末の実行プロセスのままであるため、他のコマンドを実行するには新しいタブまたはウィンドウを開く必要があります。
サーバーを停止するには、 Control-Cを押します。
backend-exercise-[something here]という名前の仮想環境を終了するには、実行してください。
(backend-exercise-o4dc6oDL)$ deactivate
pipenv shellを実行する代わりに、コマンドの前にpipenv runを追加することもできます。例: pipenv run python app.py
コードに変更を加える前に、新しいブランチを作成してください。通常、ブランチは対処されている機能またはバグフィックスに基づいて名前が付けられていますが、このプロジェクトでは、レビュー担当者が簡単に従うことができるように、自分の名前でブランチを名前を付けます。
git checkout -b <YOUR_NAME>
ブランチ名はすべて小文字であり、スペースを含めることはできません。スペースの代わりに、ハイフンを使用します。例えば:
git checkout -b varun-munjeti
サーバーを起動するとlocalhost:5000で継続的に実行されるプロセスが継続的になります。サーバーにリクエストを行うには、Postmanを使用してください。
まず、 / endpointにGET requestを作成します。サーバーはlocalhost:5000で実行されているため、フルエンドポイントURLはlocalhost:5000/です。

/mirrorエンドポイントを呼び出してみてください。まず、エンドポイントのコードを見て、URLパラメーターを指定する方法を確認します。次に、Postmanにlocalhost:5000/mirror/<name> :

これらのエクササイズは、フラスコを使用して安らかなAPIを作成することを説明します!データベースインスタンスのセットアップのすべての手間を実行することを望んでいないため、ダミーデータとMockデータベースインターフェイスを作成して対話しました。簡単になるため、 app.pyで実装されているAPPDBロジック全体を除いて、APPロジック全体がmockDBロジックを差し引いています。大規模なプロジェクトの場合、APIエンドポイントは通常、 viewsと呼ばれる異なるファイルに分離されます。
開始する前に、 create_response関数とその仕組みをよく見てください。この機能の使用方法のガイドラインに従ってください。そうしないと、APIは適切な慣習に従いません。
モックデータベースもご覧ください。最初のダミーデータはmockdb/dummy_data.pyで定義されています。これは、サーバーを起動するときに「データベース」に「存在する」ものです。
mockdb/mockdb_interface.pyで定義されている関数は、mockdbを照会する方法です。 app.pyでは、APIを書く場所では、これはdbという名前でインポートされています。したがって、エンドポイントのコードを記述すると、 db.get('users')のようなDBインターフェイス関数を呼び出すことができます。
コードを変更すると、コードがコンパイルされない場合を除き、サーバーは自動的に更新されます。その場合、サーバーは実行を停止し、コードを修正した後に手動で再起動する必要があります。
エンドポイントを定義します:
GET /users
これにより、MOCKDBのすべてのuserのリストを含む適切にフォーマットされたJSON応答を返す必要があります。サーバーを起動した直後にこのエンドポイントを呼び出す場合は、Postmanでこの応答を取得する必要があります。
{
"code": 200,
"message": "",
"result": {
"users": [
{
"age": 19,
"id": 1,
"name": "Aria",
"team": "LWB"
},
{
"age": 20,
"id": 2,
"name": "Tim",
"team": "LWB"
},
{
"age": 23,
"id": 3,
"name": "Varun",
"team": "NNB"
},
{
"age": 24,
"id": 4,
"name": "Alex",
"team": "C2TC"
}
]
},
"success": true
}
エンドポイントを定義します:
GET /users/<id>
これにより、リクエストからidが提供されている単一のユーザーを取得する必要があります。
提供されたidを持つユーザーが存在しない場合は、説明的なmessageを含む404返します。
最初の/users参加しているチームに基づいてユーザーを照会する機能を追加して拡張します。パート2のようにURLパラメーターを使用しないでください。代わりに、クエリ文字列を使用します。
teamクエリ文字列パラメーターとして提供されている場合、そのチームにあるユーザーのみを返します。提供されたteamにユーザーがいない場合は、空のリストを返します。
この演習では、 team以外のクエリ文字列パラメーターを無視できます。
Postmanでは、クエリ文字列を要求URLに書き込むクエリ文字列パラメーターを提供するか、次にSendれてParamsボタンを押してください。そうすることで、リクエストURLが自動的に入力されます。
以下が起こるはずです
GET /users?team=LWB
{
"code": 200,
"message": "",
"result": {
"users": [{
"age": 19,
"id": 1,
"name": "Aria",
"team": "LWB"
}, {
"age": 20,
"id": 2,
"name": "Tim",
"team": "LWB"
}]
},
"success": true
}

エンドポイントを定義します:
POST /users
このエンドポイントは、新しいユーザーを作成するはずです。各リクエストは、リクエストのbodyにname 、 age 、およびteamパラメーターを送信する必要があります。 idプロパティは、mockdbで自動的に作成されます。
リクエストが成功すると、 201のステータスコードを返し、新しく作成されたユーザーを返す必要があります。
必要な3つのパラメーターのいずれかが提供されていない場合は、DBに新しいユーザーを作成しないでください。有用なmessageで422返してください。一般に、メッセージはユーザー/開発者に、彼らが何を間違えたのか、どのようにそれを修正できるかについての有用なフィードバックを提供する必要があります。
これは、郵便配達員からbodyパラメーターを送信する方法です。これをクエリパラメーターと間違えないようにしてください! 
エンドポイントを定義します:
PUT /users/<id>
更新するユーザーを指定する必要があるため、ユーザーのidを提供する必要があります。このリクエストのbodyには、パート4からのPOST要求と同じ属性を含める必要があります。
ただし、このPUTリクエストの違いは、提供されたキー( name 、 age 、 team )の値のみが更新され、提供されていないパラメーターが更新されるユーザーの対応する属性を変更しないことです。
name 、 age 、 teamではない場合、 bodyパラメーターを説明する必要はありません。
提供されたidを持つユーザーが見つからない場合は、 404と有用なmessageを返します。
エンドポイントを定義します:
DELETE /users/<id>
これにより、関連するidでユーザーが削除されます。対応のresultには何も指定する必要はありませんが、有用なmessageを返してください。
提供されたidを持つユーザーが見つからない場合は、 404と有用なmessageを返します。
ユニットテストを書きましょう!ユニットテストは、ソフトウェア開発にとって非常に重要です。手動でテストするためにすべてを手動でテストするため、機能が機能するかどうかを自動的に確認できます。テスト駆動型開発は、仕様を定義し、その仕様にテストを作成し、機能を実装し、テストを使用して機能するかどうかを検証するソフトウェア開発プロセスです。パート1-3のテストが書かれているので、私たちはあなたのために少しやりました。それらをテストするには:
pipenv install --dev
pipenv run pytest
変更が機能した場合、 5 passedという緑の線が表示されるはずです。そうでない場合は、スタックトレースに従って実装を修正します。それらが機能したら、パーツ3〜6のテストを書きましょう。
Pytestを使用します。Pytestは、 test_get_indexなどのtestから始まるPythonメソッドを自動的に見つけて実行する便利なPythonテストフレームワークを使用します。この場合、 test_app.pyという名前のテストファイルがあり、パート1〜3のすべてのテストを保持しています。
各メソッドは、Pytestによって自動的に注入されるclientオブジェクトも受け入れます。 clientはテストフィクスチャであり、複数のテストで使用できるものであり、テストに固定ベースラインを提供します。初期化するとき、Pytestはconftest.pyを調べ、すべての備品を収集します。この場合、 clientフィクスチャがあり、Flaskテストクライアントを提供し、APIを簡単にテストするために使用できます。 Flask Testクライアントを使用して他の種類のリクエストを作成する方法と、リクエストペイロードを使用する方法を調べてください。
すべての手順が完了したら、GitHubリポジトリに変更を押してください!
提出する前に、PythonのフォーマッタであるBlackを走らせましょう。これにより、Pythonコードのスタイル方法に関するすべての引数が削除され、レビュー担当者がレビューする標準化されたスタイルを提供します。 pipenv install --devでインストールする必要があります
pipenv run black .
PRを提出する前に、ブランチをリモートブランチ(ローカルではなくgithub上にあるもの)に押し込む必要があります。
あなたがあなたの枝にいることを確認してください:
git branch
すべてのコミットがあることを確認したい場合:
git log
Qを押して、 git log画面を終了します。
あなたのコミットをあなたのリモートブランチに押し込みます:
git push
これを初めて行うときは、リモートブランチがまだ存在していないため、エラーが発生する可能性があります。通常、使用する正しいコマンドがわかります。
git push --set-upstream origin <YOUR_BRANCH_NAME>
注:これは、初めて新しいブランチを押すときにのみ行う必要があります。その後、 git pushだけを使用できます。
これが完了したら、 Forkedリポジトリとブランチ名へのリンクを使用して、[email protected]にメールを送信してください。あなたの提出を見るためにこれら2つのことが必要です。