FlaskでWebAPIを作成しているうちに「Filterの様なモノを作って、そこで認証処理をさせたいな」と思い立ちました。

「Python Filter」といった検索ワードで検索してみたのですが、PythonではC#で言うFilterをデコレータと呼ぶそうです。

詳しい使い方に関しては省いて、コードベースで説明していきます。

開発環境
  • Python:3.8.2
  • Flask:1.1.2

デコレータの実装例

上記がデコレータ本体のコードで、例ではリクエストのAuthorizationヘッダーからトークンを取得しているイメージです。

作成したデコレータを使うには以下の様なコードを書きます。

ルーティング用のデコレータの下に、「@(ファイル名).(関数名)」という形式で定義します。

どうやらこのデコレータ、上からではなく下から実行されるようですので、順番にはくれぐれもご注意ください。

上記の実装で、GETリクエスト(/get)の際にデコレータの中身(Authorizationヘッダーの認証処理)が走るようになります。

デコレータの実装でハマったコト

1ファイルの中に複数のエンドポイントを作成し、それぞれにデコレータを付与していたのですが、実行時エラー。

試しに1個だけにしてみたら正常終了。

原因はデコレータ内の「wraps」デコレータ不足でした。

参考にするサイトによっては記述されてなかったりして、他にもハマる人いそうです。

参考にしたサイト

下記のサイトを参考にさせて頂きました。

以上です。

スポンサーリンク