In diesem Artikel geht es um die Implementierung von Swagger in einem Django-Rest-Framework-Projekt; wir werden an unserer Kontenverwaltung arbeiten
Schauen Sie sich bei Interesse frühere Artikel an!
Der beste Swagger-Generator, den ich für das Rest-Framework gefunden habe, ist drf-yasg, aber ich bin offen für Vorschläge, wenn Sie einen besseren kennen!
Beginnen wir mit der Paketinstallation
pip install drf-yasg
Jetzt gehe ich zu unserer Einstellungsdatei
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
Wir haben die drf_yasg-App zu den installierten Apps hinzugefügt und die Standardauthentifizierungsmethode auf Bearer-JWT-Token eingestellt.
Jetzt zur URLs-Datei
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 ]
das ist es! tolle Arbeit!
Lass es uns versuchen
python manage.py runserver 0.0.0.0:8555
Das Öffnen von http://localhost:8555/swagger/ sollte so aussehen
Beginnen wir mit der Anmeldung über die Login-API-Ansicht in Swagger
Dann authentifizieren wir uns mithilfe der Schaltfläche „Autorisieren“ oben auf der Swagger-Seite. Stellen Sie sicher, dass Sie das Zugriffstoken verwenden, und vergessen Sie nicht den Bearer davor: „Bearer token...“
Versuchen wir mal, das Passwort mit Swagger zu ändern
es ist leer! Swagger konnte das Anforderungsschema nicht erkennen. Der einfachste Weg, es anzupassen, ist die Verwendung des automatischen Swagger-Schemas
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")
Jetzt sieht es gut aus
Wir können jetzt alle authentifizierten Anfragen mit Swagger testen! Im nächsten Artikel geht es zurück zur Konten-App
Bleiben Sie dran ?
Das obige ist der detaillierte Inhalt vonDjango Rest-Framework mit Swagger. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!