フラスコ基礎API:フラスコ基本
この投稿方法
ダバンティー / Pythonレスト
基本的なフラスコ休息APIを示しているサンプルプロジェクト
こんにちは!私はフラスコについて追跡するためにこのレポを作成しました、しかし、私はそれを終えて、決して決しません.私は実際には、Pythonの残りのAPIを作成するには本当に素晴らしい経験のために同じことをお勧めします.
View on GitHub
このポストで
このポストは、工場のパターンを使用して、非常に単純なフラスコアプリを作成するまで歩いてください.そして、テスト駆動の開発をPyTestで使用することによって、青写真で簡単な健康チェックコントローラをつくります.このポストの終わりに、あなたは、完全なテスト報道で非常に単純なウェブサーバを持っています!
トピック
フラスコ工場パターン
フラスコの全体は
Flask
アプリケーションオブジェクト、Flaskを使用して起動しなければならない最初のことは、プロジェクト内のどこかのオブジェクトを作成することです.このチュートリアルでは2つの一般的な方法があります:アプリケーションのインスタンスを返す“ファクトリメソッド”を宣言します.このメソッドはもう少しタイピングが必要ですが、多くの利点があります.
__init__.py
モジュールです.# python_rest/__init__.py
from flask import Flask
def create_app():
return Flask(__name__)
それはアプリを宣言するためのすべてのコードです!ここでは、フラスコ開発サーバで実行する必要があります.コマンドラインで走る
我々は簡単にコマンドラインで詩を使用してアプリケーションを実行することができますが、最初に我々は何を実行するフラスコを指示する必要があります.幸運にも、それは我々があらゆる種類のものを宣言させる環境ファイルのためのビルトイン支持で来ます.まず、追加
python-dotenv
開発依存.$ poetry add -D python-dotenv
ここで、“flasktle - app”という環境変数をモジュールの名前に設定します.Note: The Flask recommendation is to check the ".flaskenv" file into the project with any non-sensitive, default values. You can then override them with the more standard ".env" file which should never be checked into source control.
# .flaskenv
FLASK_APP=python_rest
さて、開発サーバーを実行する準備が整いました.あなたが詩の下でそれを実行してください!$ poetry run flask run
魅力的な
docstring
Python関数を書いたので、確実にその関数のdocstringを書くべきです.あなたのコードを文書化する理由は終りがありません、私はそれがすべての機能を少なくともストリングの要約でDocStringに与える最高の実行を見つけます.後にあなたのAPIのために良いドキュメンテーションを作成するために、docstringは重要です、それで、習慣的に習慣を得ることは最高です.
そこにdocstringの形式の束があり、ほとんどがサポートされ、PyChargerでレンダリングすることができます.This page さまざまな形式の素晴らしい概要を提供します.私は他のタイプのプロジェクトで使用するスフィンクスによってネイティブにサポートされているので、再構築テキスト文字列を使用します.このように見えます.
def create_app():
"""
Creates an application instance to run
:return: A Flask object
"""
return Flask(__name__)
型注釈
私はタイプの注釈がいかに重要かを強調できません.Pythonのダイナミックなタイピングシステムはものすごいです、そして、コードを非常に速く書くことを作ります.しかし、簡単にあなたのプロジェクトは、より複雑になるように簡単にミスをすることができます.私はPyChargerが私が何かダム(何かを返すことを忘れているような)をしているとき、私に話すことができるようにすべてのものにヒントを入力します.我々のタイプ注釈
create_app
関数は以下のようになります:def create_app() -> Flask:
テスト駆動開発
テスト駆動開発、またはTDDは、コード自体を書く前に、コードのテストを書くだけの行為です.これが良い考えである理由に書かれた全体の本があります、しかし、非常に単純に、これは私がそれをする理由です:
pytest
テストを書くためには、ある種のフレームワークを使用する必要があります.Python標準ライブラリに含まれるものは一つです.pytest . 使用する理由がたくさんありますが、その基本は以下の通りです.
$ poetry add -D pytest pytest-flask
PyChargerを使っているなら、PyTestを使うように設定しますNote: you can change Docstring format here too
次に、テストディレクトリにPyTest(conftest . pyという)用の設定ファイルを作成します.テストが実行される前に、このファイルは常にインポートされます.また、使用する予定のすべてのフィクスチャを定義し、他のプリテストセットアップを実行する場所です.PyTestフラスコを使うために、我々は我々の
Flask
オブジェクト.# tests/conftest.py
import pytest
from flask import Flask
@pytest.fixture
def app() -> Flask:
""" Provides an instance of our Flask app """
from python_rest import create_app
return create_app()
青写真
今私たちが打つことができるエンドポイントを作成する時間です.非常に一般的な習慣は、あなたのアプリケーションが実行されていることを確認するために何らかの健康チェック終点を持つことです.このエンドポイントを作成するために、我々はBluePrints(経路の下のコントローラのコレクション)に登録されるコントローラ(要求を処理する機能)を作成する必要があります.
まず最初に、この新しいコードをどこに置くかを調べましょう.私はモジュールの下で「青写真」と呼ばれるモジュールで私が作成するどんな青写真も保つのが好きです.この青写真はルートパス("/")を管理するためです.
次に、テストディレクトリにこのディレクトリ構造を反映させるべきです.適切に加えて
__init__.py
ファイル全体のプロジェクト構造は以下のようになります.python-rest
|-- README.md
|-- poetry.lock
|-- pyproject.toml
|-- python_rest
| |-- __init__.py
| `-- blueprints
| |-- __init__.py
| `-- root.py
`-- tests
|-- conftest.py
`-- test_blueprints
|-- __init__.py
`-- test_root.py
作成したいエンドポイントのテストを書きましょう.PyTest Fraskによって提供されたクライアントフィクスチャを使用して、適切にリクエストを実行できます.我々は、健康チェックがいくつかのJSON体で200(OK)の状態を返すことを望みます.次のテストです# tests/test_blueprints/test_root.py
from http import HTTPStatus
def test_health(client):
response = client.get('/health/')
assert response.status_code == HTTPStatus.OK, 'Health check failed'
assert response.json == {'message': 'Healthy'}, 'Improper response'
これらのアサートステートメントは、テストを実行するときにテストを通過させるか失敗するかを指定します.assert後のコンマの後の文字列は、チェックが失敗した場合に表示されるメッセージです.PyChargerの関数定義の横にある小さな緑色の矢印をクリックしたり、実行したりしてテストを実行しますpoetry run pytest
コマンドラインで.いずれにせよ、あなたはそれが失敗するのを見るべきです.それでは、ルート青写真と実際の終点を作成しましょう.
# python_rest/blueprints/root.py
from flask import Blueprint
# Declare the blueprint with whatever name you want to give it
root_blueprint = Blueprint('root', __name__)
# This is how you register a controller, it accepts OPTIONS and GET methods by default
@root_blueprint.route('/health/')
def health():
return {'message': 'Healthy'} # This will return as JSON by default with a 200 status code
今、我々は実際には、コントローラに到達できるように、この青写真をアプリケーションに登録する方法が必要です.彼らはこれを行うには、アプリに青写真を登録アプリケーションの作成で呼び出される関数で行われます.慣例は、この関数“initloseアプリ”という名前を付けることです、そして私は一度にすべての青写真を登録する1つの“iInCountアプリ”機能を持っているのが好きです.論理的なことは、この関数を__init__.py
BluePrintsモジュールの.# python_rest/blueprints/__init__.py
from flask import Flask
def init_app(app: Flask):
from .root import root_blueprint
app.register_blueprint(root_blueprint)
今ちょうどあなたのCreateRoundアプリ工場機能からこの関数を呼び出す必要があります.# python_rest/__init__.py
from flask import Flask
def create_app() -> Flask:
"""
Creates an application instance to run
:return: A Flask object
"""
app = Flask(__name__)
from . import blueprints
blueprints.init_app(app)
return app
それだ!あなたが再びテストを実行する場合は、今パスする必要があります!また、フラスコのアプリを実行してlocalhost:5000/health/
ブラウザでJSONレスポンスを確認します.Reference
この問題について(フラスコ基礎API:フラスコ基本), 我々は、より多くの情報をここで見つけました https://dev.to/dbanty/python-rest-api-flask-basics-3ffnテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol