Drf-spectacular (swagger) не показывает тело запроса «application/json» в SwaggerUI
У меня есть представление входа в систему со следующим телом запроса:
Однако, когда я выбираю тип содержимого «application/json», я получаю только пример, без соответствующих данных из моего сериализатора, которые отображаются в других типах содержимого.
Я перепробовал множество вариантов отображения схемы тела запроса, но, похоже, ничего не помогает.
Вот мое мнение:
class LoginSerializer(serializers.Serializer):
username = serializers.CharField(
min_length=4, # Minimum length for login
max_length=50, # Maximum length for login
required=True, # Field is required
help_text="email of the user",
)
password = serializers.CharField(
min_length=8, # Minimum length for password
max_length=128, # Maximum length for password
required=True, # Field is required
style={'input_type': 'password'}, # This will hide the input in browsable API
write_only=True, # Prevents password from being exposed in responses
help_text="password of the user",
)
@extend_schema(examples=[
OpenApiExample(
'Example',
value={"username": "email of the user", "password": "password of the user"},
request_only=True,
)
],)
class LoginView(GenericAPIView):
"""Authenticates the user via django session authentication cookie"""
serializer_class = LoginSerializer
def post(self, request):
serializer = LoginSerializer(data=request.data)
username = request.data.get('username')
password = request.data.get('password')
if not serializer.is_valid():
return ValidationError(serializer.errors)
user = authenticate(username=username, password=password)
if user is None:
return ValidationError('Invalid credentials.')
login(request, user)
return JsonResponse({'detail': 'Successfully logged in.'})
и вот мои настройки drf:
SPECTACULAR_SETTINGS = {
'TITLE': 'Project API',
'DESCRIPTION': 'Backend Project',
'VERSION': '1.0.0',
'SERVE_INCLUDE_SCHEMA': False,
'SWAGGER_UI_DIST': 'SIDECAR', # shorthand to use the sidecar instead
'SWAGGER_UI_FAVICON_HREF': 'SIDECAR',
'REDOC_DIST': 'SIDECAR',
'POSTPROCESSING_HOOKS': [
'drf_spectacular.contrib.djangorestframework_camel_case.camelize_serializer_fields', # ensures compatibility with camelizer
],
"SWAGGER_UI_SETTINGS": {
"displayRequestDuration": True
},
# OTHER SETTINGS
}
# DRF Definitions
REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
'DEFAULT_RENDERER_CLASSES': [
'djangorestframework_camel_case.render.CamelCaseJSONRenderer',
'djangorestframework_camel_case.render.CamelCaseBrowsableAPIRenderer',
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication', # using Django's Default Session Authentication
],
'DEFAULT_PARSER_CLASSES': [
'djangorestframework_camel_case.parser.CamelCaseFormParser',
'djangorestframework_camel_case.parser.CamelCaseJSONParser',
],
'JSON_UNDERSCOREIZE': {
'no_underscore_before_number': True,
}
}
Моя цель состоит в том, чтобы также показывать информацию о теле запроса для JSON-запросов. Как этого можно добиться?