1. HOME
  2. ブログ
  3. IT技術
  4. 【第3回】FastAPIチュートリアル: toDoアプリを作ってみよう【認証・ユーザ登録編】

【第3回】FastAPIチュートリアル: toDoアプリを作ってみよう【認証・ユーザ登録編】

FastAPIチュートリアル: toDoアプリを作ってみよう~第3回~

前回の記事「【第2回】FastAPIチュートリアル: ToDoアプリを作ってみよう【モデル構築編】」の続きです。

今回も、ToDoアプリを作る過程で、FastAPIの使い方を学んでいきましょう!

第1回はこちら

認証

FastAPIでは、HTTP BasicAuth(いわゆるベーシック認証)とOAuth2(オーオース)と呼ばれる認証をサポートしています。

本アプリケーションは、あまり凝ったアプリケーションでもないので、ベーシック認証を利用することにします。

今の時代、「ログインフォームなどを作成してログイン」する形のほうが一般的ではありますが、今回はご容赦ください。

さて、FastAPIでベーシック認証を使用するにあたり、下準備がいくつかあります。

新たにimportするモジュール

controller.py に、以下のモジュールを新しくインポートしてください。

(重複しているものは、適宜無視してください)

上から2つは、FastAPIでベーシック認証を使うのに必要なクラスです。

後半の新しく追加したものは、入力された「ユーザ名」や「パスワード」がデータベースにあるものと一致するかを検証するのに使います。

管理者ページのコントローラを修正する

次に、管理者ページのビューを表示する前のコントローラ admin() を修正していきます。

というより、ほとんど変更しますので、上からコピペでも構いません。

各処理の詳細はコメントで書いたので、読んでいただければ理解できるかと思います。

SQLAlchemyでは、 filter() でSQL構文でいう「WHERE」を扱うことができます。

また、 first() で該当クエリを上から1つ、 all() ですべてをリスト化して取得できます。

いずれもなければ、 None が返ってきます。

確認

では、動作確認をしてみましょう!

fastapi_3-1

Basic認証画面

うまく動作していそうです!

わざと間違えると、簡単なエラーが返ってくることも確認できました。

ユーザをWeb上で登録できるようにする

現状、ユーザを登録するには、Pythonコードから一つ一つデータベースにコミットしなければなりません。

このままでは、誰もが使えるアプリケーションではないので、Web上からユーザを新たに登録できるようにします。

ルーティング

そうと決まれば新たに「register」という名前で『URL』『コントローラ』『ビュー』を作りましょう。

今回は、「GETメソッド」と「POSTメソッド」で処理を分けるので、上記のように引数で指定してあげます。

とりあえず、コントローラの処理は後回しにします。

ビューも「templates/resiter.html」というファイルを作っておきましょう。

コントローラのGETメソッド処理を書く

つぎに、GETメソッドで受け取ったときの処理を書きます。

しかし、ここでは「単にビューを返すだけ」なので特に面白いことはありません…。

これだけです。

ビューを作る

次は、「ビュー」を作りましょう。

必要なのは、データベースに登録するための情報だけなので、それに見合ったフォームを書けばよいだけです!

今回は、「利用規約に同意するチェックボックス」や、「メール認証」などは今回は省きます。

(そんなに難しい実装でもないので、余力のある人は是非実装してみてください)

後々のことを考えて、エラー表示する部分も実装しています。

fastapi_3-2

登録フォームのビュー

コントローラのPOSTメソッドを書く前に…

ここからが本題です。

先ほど作ったフォームから、POSTとしてデータが渡されました。

これらのデータは、非同期処理として処理されるため、コントローラの関数の先頭に async をつけます

そして、フォームデータの受け取り方は以下のように行います。

このように、starletteのRequestクラスの form() 関数を使うことで実現できます。

今回は、GETとPOSTの処理を同じURLで兼任しましたが、もしURL(コントローラ)を分ける場合、FastAPIでサポートされている Form() という関数を利用しても実現可能なようです。

そちらが気になる方は、以下の公式ドキュメントを参照してみてください。

【Form Data – FastAPI】
http://fastapi.tiangolo.com/tutorial/request-forms/

POSTメソッド処理を書く

下準備はできたので、実装していきましょう!

まずは、入力されたデータが「正しい」か「否」かを判定します。

そのために、正規表現を使ってみましょう。

新しくcontrollers.pyに、以下の「re」というモジュールをインポートし、各パターンを作ります

コードを見た方が早いですね。

文字列の先頭に r がついているのは、バックスラッシュなどをエスケープしなくても良いようにするためです。

そうしたら、POSTメソッドの処理を書きましょう!

コードは大したことをやっていないので、読んでいただくと処理が理解できるかと思います!

登録完了のビューをつくる

最後に、「登録完了の画面」を作成しましょう。

これも、そんなに凝ったものでなくて大丈夫ですが、そのままスムーズにログインに移行できるものが良いですね。

確認

fastapi_3-3

適当にユーザ登録してみる

fastapi_3-4

登録完了

第3回:さいごに

ここで第3回は、終わりです。

今回は、「認証」と「ユーザ登録」について実装をしました。

FastAPIの場合での、シンプルなベーシック認証についてご理解いただけたかと思います。

次回は、管理者ページ(ユーザページ)をもっとToDoアプリケーションらしくしていきます!

関連記事

ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

関連記事