nikkie-ftnextの日記

イベントレポートや読書メモを発信

djoserのSample usageのtestprojectを動かす

はじめに

おにめつのじん! nikkieです。

過去に触ったdjoserの思い出しです。

目次

PyCon JP 2021 スタッフ活動の中で作ったDjangoアプリ

プロポーザルレビューアプリをDjangoで作りました。

レビュー機能はWebアプリとして作ったのですが、管理者用のデータ管理APIDjango REST Frameworkで実装しています1
akiyokoさんの『現場で使える Django REST Framework の教科書』にめちゃめちゃ助けていただきました。

データ管理APIは管理者しか扱えないよう、djoserを使って認証を実装しました2

「ここってどうやったんだっけ」と思い出したく、今回手を動かしました。

djoserのSample usage

こちらに沿って進めていきます。

サンプルアプリを動かす

djoserのリポジトリにはサンプルアプリがあります。
まずはリポジトリをクローン

% git clone git@github.com:sunscrapers/djoser.git -b 2.2.2
% cd djoser

Python 3.11.8で仮想環境を作っています。

% pip install -e .
% pip install 'webauthn<1'

動作環境

annotated-types==0.6.0
asgiref==3.8.1
asn1crypto==1.5.1
cbor2==5.6.3
certifi==2024.2.2
cffi==1.16.0
charset-normalizer==3.3.2
cryptography==42.0.7
defusedxml==0.8.0rc2
Django==5.0.6
django-templated-mail==1.1.1
djangorestframework==3.15.1
djangorestframework-simplejwt==5.3.1
-e git+ssh://git@github.com/sunscrapers/djoser.git@5842524091a00ffbaecc667605da8135a8a60d0d#egg=djoser
future==1.0.0
idna==3.7
oauthlib==3.2.2
pycparser==2.22
pydantic==2.7.1
pydantic_core==2.18.2
PyJWT==2.8.0
pyOpenSSL==24.1.0
python3-openid==3.2.0
requests==2.31.0
requests-oauthlib==2.0.0
six==1.16.0
social-auth-app-django==5.4.1
social-auth-core==4.5.4
sqlparse==0.5.0
typing_extensions==4.11.0
urllib3==2.2.1
webauthn==0.4.7

manage.pyを実行します。

% cd testproject
% ./manage.py migrate
% ./manage.py runserver 8088

models.W042が出ていました(Djangoのバージョンアップの影響なのかな?)

Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the AppConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.

今回は無視して進めています

トークン認証を体験する

別のターミナルにて

ユーザを作りました
curlでは--dataを指定したときPOSTになるので-X POSTは省略)

% curl http://127.0.0.1:8088/auth/users/ --data 'username=djoser&password=alpine12'
{"email":"","username":"djoser","id":1}

APIを介してログインします。
認証に使うトークンが返ります

% curl http://127.0.0.1:8088/auth/token/login/ --data 'username=djoser&password=alpine12'
{"auth_token":"0d0bca572490495255f1f626d96bfb61ffaba86a"}

リクエストヘッダにトークンを含めて、自分の情報を確認

% curl -L http://127.0.0.1:8088/auth/users/me/ -H 'Authorization: Token 0d0bca572490495255f1f626d96bfb61ffaba86a'
{"email":"","id":1,"username":"djoser"}

ログアウト

% curl http://127.0.0.1:8088/auth/token/logout/ --data '0d0bca572490495255f1f626d96bfb61ffaba86a' -H 'Authorization: Token 0d0bca572490495255f1f626d96bfb61ffaba86a'

トークンが使えなくなりました。

% curl -L http://127.0.0.1:8088/auth/users/me/ -H 'Authorization: Token 0d0bca572490495255f1f626d96bfb61ffaba86a'
{"detail":"Invalid token."}

サンプルアプリの設定を見る

プロジェクトのurls.pyを見ると、色々有効になっています。
https://github.com/sunscrapers/djoser/blob/2.2.2/testproject/urls.py
djoser.social.urlsなども有効になっているっぽい!

settingsを見ると
https://github.com/sunscrapers/djoser/blob/2.2.2/testproject/settings.py

  • INSTALLED_APPS"social_django"
  • AUTHENTICATION_BACKENDSFacebookGoogle、Steamの指定
    • これらの設定値(例:SOCIAL_AUTH_FACEBOOK_KEY

と、ソーシャルログインも設定できる雰囲気です(宿題事項)

終わりに

過去に使ったdjoserの思い出しでした。
用意されていたサンプルアプリを動かしました。
トークン認証を思い出せました!