Add schema to ObtainAuthToken

Add encoding parameter to ManualSchema
This commit is contained in:
Paulo Scardine 2017-12-17 02:11:15 -02:00 committed by paulos
parent d12005cf90
commit ef3375355c
2 changed files with 29 additions and 3 deletions

View File

@ -3,6 +3,9 @@ from rest_framework.authtoken.models import Token
from rest_framework.authtoken.serializers import AuthTokenSerializer
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.schemas import ManualSchema
import coreapi
import coreschema
class ObtainAuthToken(APIView):
@ -11,6 +14,29 @@ class ObtainAuthToken(APIView):
parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,)
renderer_classes = (renderers.JSONRenderer,)
serializer_class = AuthTokenSerializer
schema = ManualSchema(
fields=[
coreapi.Field(
name="username",
required=True,
location='form',
schema=coreschema.String(
title="Username",
description="Valid username for authentication",
),
),
coreapi.Field(
name="password",
required=True,
location='form',
schema=coreschema.String(
title="Password",
description="Valid password for authentication",
),
),
],
encoding="application/json",
)
def post(self, request, *args, **kwargs):
serializer = self.serializer_class(data=request.data,
@ -20,5 +46,4 @@ class ObtainAuthToken(APIView):
token, created = Token.objects.get_or_create(user=user)
return Response({'token': token.key})
obtain_auth_token = ObtainAuthToken.as_view()

View File

@ -432,7 +432,7 @@ class ManualSchema(ViewInspector):
Allows providing a list of coreapi.Fields,
plus an optional description.
"""
def __init__(self, fields, description=''):
def __init__(self, fields, description='', encoding=None):
"""
Parameters:
@ -442,6 +442,7 @@ class ManualSchema(ViewInspector):
assert all(isinstance(f, coreapi.Field) for f in fields), "`fields` must be a list of coreapi.Field instances"
self._fields = fields
self._description = description
self._encoding = encoding
def get_link(self, path, method, base_url):
@ -451,7 +452,7 @@ class ManualSchema(ViewInspector):
return coreapi.Link(
url=urlparse.urljoin(base_url, path),
action=method.lower(),
encoding=None,
encoding=self._encoding,
fields=self._fields,
description=self._description
)