7👍
As you said django-rest-swagger is deprecated.
That’s why it is recommended to use drf-yasg.
from drf_yasg import openapi
from drf_yasg.utils import swagger_auto_schema
class ArticleViewSet(viewsets.ModelViewSet):
@swagger_auto_schema(request_body=openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
'test_token': openapi.Schema(type=openapi.TYPE_STRING, description='string'),
}
))
def create(self, request, *args, **kwargs):
...
Or if you want to use a DRF action
@swagger_auto_schema(method="post", request_body=openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
'test_token': openapi.Schema(type=openapi.TYPE_STRING, description='string'),
}
))
@action(method=["post"], detail=False)
def my_post_action(self, request, *args, **kwargs):
...
Or with api view:
# here we define that this view accepts a json (or object parameter) that has test_token parameter inside of it
@swagger_auto_schema(method='post',
request_body=openapi.Schema(
type=openapi.TYPE_OBJECT, # object because the data is in json format
properties={
'test_token': openapi.Schema(type=openapi.TYPE_STRING, description='this test_token is used for...'),
}
), operation_id="token_view")
# your view
@api_view(['POST'])
def token_view(request):
pass
And your url.py will look like so
# define some basic info about your api for swagger
schema_view = get_schema_view(
openapi.Info(
title="Snippets API",
default_version='v1',
description="Test description",
terms_of_service="https://www.google.com/policies/terms/",
contact=openapi.Contact(email="contact@snippets.local"),
license=openapi.License(name="BSD License"),
),
public=True,
permission_classes=[permissions.AllowAny],
)
urlpatterns = [
# define your api view url
path('token_view/', token_view),
# define the url of the swagger ui
url(r'^swagger/$', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
]
1👍
If you are just wanting something to test the API, Django rest framework actually comes with it’s own browsable API. If you set a serializer_class
on your APIView
then the BrowsableAPIRenderer
will figure out all of the relevant details for you.
The following should do the trick:
from rest_framework import serializers, status
from rest_framework.response import Response
from rest_framework.generics import GenericAPIView
class MySerializer(serializers.Serializer):
token = serializers.CharField()
class MyView(GenericAPIView):
serializer_class = MySerializer
def post(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
data = serializer.data
return Response("test_token success", status=status.HTTP_200_OK)
# urls.py
urlpatterns = [
...
path("api/test_token", views.MyView.as_view(), name="test_token")
]
(Notice that in Django 2+ we use path
instead of the old url
pattern. If you still want to use regex patterns you can use path_re
).
The above assumes that you haven’t changed the default settings for renderers. The default is:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
]
}
Just browse to the relevant end-point and you’ll have a nice interface for testing.
Under the hood it is is the fact that the serializer_class
is set that enables this. This is the same way that DRF will auto generate a schema for use with something like swagger or redoc.
- Django StaticFiles and Amazon S3: How to detect modified files?
- Django ORM and hitting DB
- Fatal error: libmemcached/memcached.h: no such file or directory
- Can't fix "zipimport.ZipImportError: can't decompress data; zlib not available" when I type in "python3.6 get-pip.py"
- Get a queryset's current order_by ordering