本文将介绍在 Django Rest 框架项目中实现 Swagger;我们将致力于我们的账户管理
有兴趣可以查看之前的文章!
我为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/ 应该看起来像
让我们首先使用 swagger 中的登录 API 视图登录
然后,我们使用 swagger 页面顶部的“授权”按钮进行身份验证。确保使用访问令牌,并且不要忘记它前面的 Bearer:“Bearer token...”
让我们尝试使用 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")
现在看起来不错
我们现在可以使用 Swagger 测试所有经过身份验证的请求!下一篇文章将回到帐户应用
敬请期待?
以上是带有 Swagger 的 Django Rest 框架的详细内容。更多信息请关注PHP中文网其他相关文章!