首页 >后端开发 >Python教程 >带有 Swagger 的 Django Rest 框架

带有 Swagger 的 Django Rest 框架

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-30 05:37:13918浏览

从这篇文章中可以期待什么?

本文将介绍在 Django Rest 框架项目中实现 Swagger;我们将致力于我们的账户管理

系列订购

有兴趣可以查看之前的文章!

  1. 从头开始的人工智能项目、创意、Alive 日记
  2. 用 Google AI Studio 证明它是可行的
  3. Django API 项目设置
  4. Django账户管理(一)、注册与激活
  5. Django账户管理(二)、登录及修改密码
  6. Swagger 与 Django Rest 框架(你在这里?)

安装和设置

我为rest-framework找到的最好的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:“Bearer token...”

Django Rest framework with Swagger

让我们尝试使用 Swagger 更改密码

Django Rest framework with Swagger

它是空的! swagger 无法识别请求模式,最简单的方法是使用 swagger auto schema

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn