MENU

Django Ninjaチュートリアル②(レスポンス処理)

Django-Ninjaチュートリアル②(レスポンス処理)

前回までの記事はこちらです。
まだ前回までの設定・学習が済んでいない方は、こちらを読んだ上で読み進めてください。

また、この記事はDjango Ninjaの公式ドキュメントに基づいて作成しています。詳細はこちらもご確認ください。

それでは始めていきましょう。

目次

レスポンスの処理について

今回は、Djnago-Ninjaにおけるレスポンスの処理についてみていきます。

Schemaの設定

Django Ninjaでは、Schamaを定義しますが、これは「バリデーション」と「ドキュメントとしての参照(いわゆる、「情報を設定する段階で、説明をつけること」)」の両方を目的としたものです。
例を見てみます。

from ninja import Schema

class HelloSchema(Schema):
  name: str = "world"

# add  
class UserSchema(Schema):
  username: str
  is_authenticated: bool
  email: str = None
  first_name: str = None
  last_name: str = None

まずは、UserSchemaを定義し、標準的なユーザーに提供される情報を定義します。

メソッドの定義

次に、Djangoにおける現在のユーザー情報を返すAPIをGETメソッドで作成します(「# add 5」を参照)。

from ninja import NinjaAPI

from example.Schema.api_v1_schema import HelloSchema, UserSchema # add

app = NinjaAPI(
  title = "Django Ninja Sample App",
  version = "1.0.0"
  ) # add

〜略〜

# add 5
@app.get("/me", response =  UserSchema)
def get_me(request):
  return request.user

これにより、UserUserSchemaに定義された項目によって構成された辞書型でJSONを返すようになります。

レスポンスを変える

上記のパターンを使うのは、おそらくDjangoにおいて、現在のユーザー情報(=認証が完了しているユーザーかどうかの情報)を取得する時に使われると思います。

ただし、必ずしも認証済みのユーザーだけではないため、認証がされていないユーザーであった場合であれば、エラーを出す必要があります。

その場合の処理は、以下のように書きます。
まずは、先ほどのUserSchemaに加えて、ErrorSchemaを定義します。

from ninja import Schema

class HelloSchema(Schema):
  name: str = "world"

class UserSchema(Schema):
  username: str
  is_authenticated: bool
  email: str = None
  first_name: str = None
  last_name: str = None

# add
class ErrorSchema(Schema):
  message: str

ErrorSchemaで扱うのは、messagestr型)のみです。

さらに、APIの設定で、エラーが出た時とそうでない時を場合分けし、認証がされたユーザーかどうかを判定します。

from ninja import NinjaAPI

from example.Schema.api_v1_schema import HelloSchema, UserSchema, ErrorSchema # add

app = NinjaAPI(
  title = "Django Ninja Sample App",
  version = "1.0.0"
  ) # add

〜略〜

# add 5(change)
@app.get("/me", response = {200: UserSchema, 403: ErrorSchema})
def get_me(request):
  if not request.user.is_authenticacted:
    return 403, {"message": "First, please sign in..."}
  return request.user

上記のコードは、

  • responseモデルとして、HTTPレスポンスが200(リクエストが適切に通った)の場合はUserScheamを、HTTPレスポンスが403(ユーザーが確認できない)の場合は、ErrorSchemaによる処理となるよう結びつけています。
  • また、その中で定義されている関数では、UserSchemaで定義したis_authenticateにより認証済みユーザーかどうかを確認し、その際、HTTPレスポンスとして403が返された場合は、ErrorSchemaで定義したmessageを返します。messageは辞書型でmessageに結びついている内容を返します。
  • 最後に、is_authenticateTrueの場合は、初めに定義したように、UserSchemaに定義した項目を返します。

また、Django Ninjaの場合、DjangoのSuperuserでログインしている場合、このhttp://127.0.0.1:8000/api/meにアクセスすると、DjangoのSuperuserの情報が返されます。

つまり、Djangoで通常作成しているSuperuserを含めた設定が、Django Ninjaでも確認ができるということです。

最後に

ちなみにですが、ビデオチュートリアル(全編英語)もあるようですので、もし興味がある場合はご覧ください。

下記に動画を貼っておきます。

それでは、Superuserが確認できたところで、今回はここまでにします。

次回は、Django NinjaにおけるCRUDについてやっていきます。

Django-Ninjaチュートリアル②(レスポンス処理)

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

はじめまして、ふじです。
Python、Django、FastAPI、React.js、Next.jsを学習している、ずっと文系のプログラミング独学者です。

目次