DjangoのDjoserライブラリでビューを書かずにトークン認証を実装する方法
Djoserは、Django向けのシンプルな認証ライブラリです。ユーザー名・メールアドレス・パスワードといったフィールドをもとに認証用トークンを自動生成でき、ビュー(View)のコードをほとんど書かずにREST APIの認証機能を構築できるのが大きな特徴です。リクエストはPOSTメソッドのみに対応していますが、フロントエンド側との連携も容易に行えます。
実装例
まず、Djangoプロジェクトとアプリを作成します。ここではプロジェクト名を「DjoserExample」、アプリ名を「myapp」としています。
次に、以下の2つのパッケージをインストールします。
pip install djoser pip install djangorestframework
settings.py の設定
settings.py に以下の行を追加します。
INSTALLED_APPS = [
# 他のアプリより下に追記
'myapp',
'rest_framework',
'rest_framework.authtoken',
'djoser'
]
# TEMPLATES 変数より下に追記
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
]
}
DJOSER = {
"USER_ID_FIELD": "username"
}ここでは djoser と rest_framework をアプリとして登録し、さらにRESTフレームワークの認証バックエンドを設定しています。また、djoser の設定として User ID フィールド(インデックスとなるフィールド)に「username」を指定しました。
なお、今回はDjango標準のユーザー認証データベース(auth_user)を使用するため、カスタムユーザーモデルやマイグレーション用の特別なモデル定義は不要です。
urls.py の設定
続いて、プロジェクトの urls.py を開き、以下のようにルーティングを追加します。
from django.contrib import admin
from django.urls import path, include, re_path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('myapp.urls')),
path('api/v1/', include('djoser.urls')),
path('api/v1/token/login/', include('djoser.urls.authtoken'))
]ここでは、djoserが提供するユーザー管理用のURLと、トークン発行用の認証エンドポイントをそれぞれ読み込んでいます。これで設定はすべて完了です。
サーバーの起動と動作確認
ターミナルで以下のコマンドを実行し、サーバーを起動します。
python manage.py makemigrations python manage.py migrate python manage.py runserver
出力結果
https://127.0.0.1:8000/api/v1/users/ にアクセスすると、以下のような画面が表示されます。

このエンドポイントに対してPOSTリクエストを送ることで、新しいユーザーを作成できます。
次に、https://127.0.0.1:8000/api/v1/token/login にアクセスします。

ここでユーザー名とパスワードを送信すると、そのユーザー専用の認証トークンが生成され、レスポンスとして返されます。取得したトークンを以降のAPIリクエストのAuthorizationヘッダーに付与することで、認証が必要なエンドポイントへアクセスできるようになります。
-
Djangoのクエリ数をターミナルで確認してデバッグする方法
この記事では、Djangoのライブラリを活用して、データベースのクエリ実行回数をターミナル上に簡潔なレポートとして表示し、デバッグに役立てる方法を紹介します。このツールは、モデルオブジェクトへのアクセス(読み取り・書き込みのどちらでも)が発生するたびに、表形式のレポートを出力します。さらに、リクエストとレスポンスに関する情報も自動的に集計してくれる便利な機能です。 実装例 まずは、アプリの登録やURL設定など、プロジェクトの基本的なセットアップを済ませておきましょう。 次に、django-querycountモジュールをインストールします。 pip install django-queryco
-
ループを使わずに数列を出力するPythonプログラム|再帰とフラグで実現する方法
本記事では、for文やwhile文などのループ構文を一切使わずに数列を表示するという問題の解法について解説します。問題の定義問題: 2つの数値 N と K が与えられます。まずNが0より大きい間はNからKを繰り返し引き、Nが0以下(ゼロまたは負)になったら、今度は逆にKを足していきます。そして値が元の数値Nに戻った時点で処理を終了します。実行例N = 10K = 4出力: 10 6 2 -2 2 6 10アルゴリズムNが0より大きい間、関数を再帰的に呼び出し続けます。各呼び出しのたびにNからKを減算します。数値が0以下になったら加算モードに切り替え、各呼び出しごとにKを加算します。元の数値Nに