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 が返ってきます。

確認

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

Basic認証画面

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

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

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

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

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

ルーティング

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

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

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

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

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

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

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

これだけです。

ビューを作る

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

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

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

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

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

登録フォームのビュー

コントローラの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メソッドの処理を書きましょう!

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

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

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

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

確認

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

登録完了

第3回:さいごに

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

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

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

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

第4回の記事はこちら

ResponderとFastAPIを実際に使って比較してみた

こちらの記事もオススメ!

書いた人はこんな人

広告メディア事業部
広告メディア事業部
「好きを仕事にするエンジニア集団」の(株)ライトコードです!

ライトコードは、福岡、東京、大阪の3拠点で事業展開するIT企業です。
現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。
いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。

システム開発依頼・お見積もり大歓迎!

また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」「WEBディレクター」を積極採用中です!
インターンや新卒採用も行っております。

以下よりご応募をお待ちしております!
https://rightcode.co.jp/recruit

関連記事

採用情報

\ あの有名サービスに参画!? /

バックエンドエンジニア

\ クリエイティブの最前線 /

フロントエンドエンジニア

\ 世界を変える…! /

Androidエンジニア

\ みんなが使うアプリを創る /

iOSエンジニア