ホームページ >バックエンド開発 >Python チュートリアル >Swagger を使用した Django Rest フレームワーク

Swagger を使用した Django Rest フレームワーク

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-30 05:37:13970ブラウズ

この記事から何を期待できるでしょうか?

この記事では、Django REST フレームワーク プロジェクトでの Swagger の実装について説明します。アカウント管理に取り組みます

シリーズの順序

興味があれば過去の記事をチェックしてください!

  1. ゼロから作る AI プロジェクト、アイデア、生きた日記
  2. Google AI Studio で実現可能であることを証明してください
  3. Django API プロジェクトのセットアップ
  4. Django アカウント管理 (1)、登録とアクティブ化
  5. Django アカウント管理 (2)、ログインとパスワードの変更
  6. Django レスト フレームワークを使用した Swagger (ここにいますか?)

インストールとセットアップ

REST フレームワーク用に私が見つけた最良の Swagger ジェネレーターは drf-yasg ですが、より良いものを知っている場合は提案をお待ちしています!
パッケージのインストールから始めましょう

pip install drf-yasg

設定ファイルに移動します

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'drf_yasg', #new
    'corsheaders',
    'rest_framework',
    'django_filters',
    'app_account',
    'app_admin',
    'app_main',
]

SWAGGER_SETTINGS = {
   'LOGIN_URL' : '/api/account/login/',
   'SECURITY_DEFINITIONS': {
      'Bearer': {
            'type': 'apiKey',
            'name': 'Authorization',
            'in': 'header'
      }
   }
}

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
    'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema'
}

alive_diary/settings.py

インストールされているアプリに drf_yasg アプリを追加し、デフォルトの認証方法を Bearer JWT トークンに設定しました。

URL ファイルに進みます

from django.contrib import admin
from django.urls import path, include


from rest_framework.documentation import include_docs_urls # new
from rest_framework.schemas import get_schema_view # new

from drf_yasg.views import get_schema_view # new
from drf_yasg import openapi # new

schema_view = get_schema_view(
    openapi.Info(
        title="Swagger API",
        default_version='v1',
    ),
    public=True,
)
API_DESCRIPTION = 'A Web API for creating and editing.' # new
API_TITLE = 'API' # new

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/account/', include('app_account.urls')),

    path('docs/', include_docs_urls(title=API_TITLE,description=API_DESCRIPTION)), # new
    path('swagger/', schema_view.with_ui('swagger',cache_timeout=0),name="swagger-schema"), # new
]

それです!素晴らしい仕事です!
試してみましょう

python manage.py runserver 0.0.0.0:8555 

http://localhost:8555/swagger/ を開くと次のようになります

Django Rest framework with Swagger

カスタム ApiView を使用した Swagger のテスト

まずは swagger のログイン API ビューを使用してログインしましょう

Django Rest framework with Swagger

次に、Swagger ページの上部にある [承認] ボタンを使用して認証します。必ずアクセス トークンを使用し、その前のベアラーを忘れないでください: "Bearer token..."

Django Rest framework with Swagger

Swagger を使用してパスワードを変更してみましょう

Django Rest framework with Swagger

空いてます! swagger はリクエスト スキーマを認識できませんでした。これを適合させる最も簡単な方法は、swagger 自動スキーマを使用することです

from drf_yasg.utils import swagger_auto_schema #new


class AccountChangePasswordView(APIView):
    permission_classes = (IsAuthenticated,)
    renderer_classes = [CustomRenderer, BrowsableAPIRenderer]

    @swagger_auto_schema(request_body=ChangePasswordSerializer) # new
    def post(self, request, *args, **kwargs):
        serializer = ChangePasswordSerializer(data=request.data)

        if not serializer.is_valid():
            raise APIException(serializer.errors)

        user = request.user
        password = serializer.validated_data.get("password")
        new_password = serializer.validated_data.get("new_password")

        if not user.check_password(password):
            raise APIException("invalid_password")

        user.set_password(new_password)
        user.save()

        return Response("success")

今はいい感じです

Django Rest framework with Swagger

Swagger を使用して、すべての認証されたリクエストをテストできるようになりました。次の記事はアカウント アプリに戻ります

乞うご期待?

以上がSwagger を使用した Django Rest フレームワークの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。