views.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from rest_framework import parsers, renderers
  2. from rest_framework.authtoken.models import Token
  3. from rest_framework.authtoken.serializers import AuthTokenSerializer
  4. from rest_framework.compat import coreapi, coreschema
  5. from rest_framework.response import Response
  6. from rest_framework.schemas import ManualSchema
  7. from rest_framework.views import APIView
  8. class ObtainAuthToken(APIView):
  9. throttle_classes = ()
  10. permission_classes = ()
  11. parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,)
  12. renderer_classes = (renderers.JSONRenderer,)
  13. serializer_class = AuthTokenSerializer
  14. if coreapi is not None and coreschema is not None:
  15. schema = ManualSchema(
  16. fields=[
  17. coreapi.Field(
  18. name="username",
  19. required=True,
  20. location='form',
  21. schema=coreschema.String(
  22. title="Username",
  23. description="Valid username for authentication",
  24. ),
  25. ),
  26. coreapi.Field(
  27. name="password",
  28. required=True,
  29. location='form',
  30. schema=coreschema.String(
  31. title="Password",
  32. description="Valid password for authentication",
  33. ),
  34. ),
  35. ],
  36. encoding="application/json",
  37. )
  38. def post(self, request, *args, **kwargs):
  39. serializer = self.serializer_class(data=request.data,
  40. context={'request': request})
  41. serializer.is_valid(raise_exception=True)
  42. user = serializer.validated_data['user']
  43. token, created = Token.objects.get_or_create(user=user)
  44. return Response({'token': token.key})
  45. obtain_auth_token = ObtainAuthToken.as_view()