简体   繁体   中英

drf-yasg: How to hide Django rest Framework schema?

I use drf_yasg swagger for my Django API. I would like to know how to easily disable the schema and model. screenshot

here is my code:

 from.models import Articles from.serializers import ArticlesSerializer from rest_framework import viewsets from rest_framework.response import Response from rest_framework import status from rest_framework.authentication import SessionAuthentication,TokenAuthentication, BasicAuthentication from rest_framework.views import APIView from rest_framework.permissions import IsAuthenticated from rest_framework.parsers import JSONParser from django.utils.decorators import method_decorator from django.contrib.auth import authenticate, login, logout from rest_framework.decorators import api_view from drf_yasg.utils import swagger_auto_schema from drf_yasg import openapi @swagger_auto_schema(methods=['get'], operation_description="description", manual_parameters=[ openapi.Parameter('category', openapi.IN_QUERY, "category1, category2, category3", type=openapi.TYPE_STRING), openapi.Parameter('name', openapi.IN_QUERY, "full name", type=openapi.TYPE_STRING), ], responses={ 200: openapi.Response('Response', ArticlesSerializer), }, tags=['Articles']) # desactivate POST methode on swagger @swagger_auto_schema(method='POST', auto_schema=None) @api_view(['GET','POST']) def articles(request): """ List all articles. """ if request.user.is_authenticated: if request.method == 'GET': articles = Articles.objects.all() serializer = ArticlesSerializer(Articles, many=True) return JsonResponse(serializer.data, safe=False) elif request.method == 'POST': data = JSONParser().parse(request) serializer = ArticlesSerializer(data=data) if serializer.is_valid(): serializer.save() return JsonResponse(serializer.data, status=201) return JsonResponse(serializer.errors, status=400) return JsonResponse({"status":"403", "message":"User not authenticated"})

If i add this

class UserList(APIView):
swagger_schema = None

i got error:

AssertionError: `method` or `methods` can only be specified on @action or @api_view views

Code Edited: the articles function is pretty simple nothing related to the API, only Python code.

Here the views Class is also pretty simple.

Class Views:

from django.db import models

class Articles(models.Model):
STATUS = (
   (1, 'PENDING'),
   (2, 'COMPLETED'),
   (3, 'DECLINED'),
   (0, 'BANNED'),
)
name = models.CharField(max_length=100)
...
status = models.PositiveSmallIntegerField(
   choices = STATUS,
   default = 1,
)

I only have half of the answer, to disable Models I added this to my setting.py

SWAGGER_SETTINGS = {
    'DEFAULT_FIELD_INSPECTORS': [
        'drf_yasg.inspectors.CamelCaseJSONFilter',
        'drf_yasg.inspectors.InlineSerializerInspector',
        'drf_yasg.inspectors.RelatedFieldInspector',
        'drf_yasg.inspectors.ChoiceFieldInspector',
        'drf_yasg.inspectors.FileFieldInspector',
        'drf_yasg.inspectors.DictFieldInspector',
        'drf_yasg.inspectors.SimpleFieldInspector',
        'drf_yasg.inspectors.StringDefaultFieldInspector',
    ],
}

Credit goes to this guys , and here is the documentation for more details.

I finally figured it out. I just had to overwrite the responses parameter with either plain text, markdown or html.

@swagger_auto_schema(methods=['get'], operation_description="Get article information ", manual_parameters=[
    openapi.Parameter('id', openapi.IN_QUERY, "Article Id", type=openapi.TYPE_STRING),
], responses={ 200: '**Example:** \
  <div class="highlight-code"><pre>{  <br>\
  "category": "string", <br>\
  "image": "string",<br>\
  "link": "string",<br>\
  "birth_date": "string",<br>\
}</pre></div>'},
tags=['Get Articles'])

To have the same css effect (background black) you can add this custom CSS in the file...\site-packages\drf_yasg\static\drf-yasg\style.css

.swagger-ui .markdown .highlight-code pre{
  color: #fff;
  font-weight: 400;
  white-space: pre-wrap;
  background: #41444e;
  padding: 15px;
}

在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM