12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- from django.http import HttpResponse, HttpResponseBadRequest
- from django.utils.decorators import method_decorator
- from django.views.decorators.csrf import csrf_exempt
- from django.views.generic import View
- from django.core.serializers.json import DjangoJSONEncoder
- from jwt_auth.compat import json, smart_text
- from jwt_auth.forms import JSONWebTokenForm
- class ObtainJSONWebToken(View):
- http_method_names = ['post']
- error_response_dict = {'errors': ['Improperly formatted request']}
- json_encoder_class = DjangoJSONEncoder
- @method_decorator(csrf_exempt)
- def dispatch(self, request, *args, **kwargs):
- return super(ObtainJSONWebToken, self).dispatch(request, *args, **kwargs)
- def post(self, request, *args, **kwargs):
- try:
- request_json = json.loads(smart_text(request.body))
- except ValueError:
- return self.render_bad_request_response()
- form = JSONWebTokenForm(request_json)
- if not form.is_valid():
- return self.render_bad_request_response({'errors': form.errors})
- context_dict = {
- 'token': form.object['token']
- }
- return self.render_response(context_dict)
- def render_response(self, context_dict):
- json_context = json.dumps(context_dict, cls=self.json_encoder_class)
- return HttpResponse(json_context, content_type='application/json')
- def render_bad_request_response(self, error_dict=None):
- if error_dict is None:
- error_dict = self.error_response_dict
- json_context = json.dumps(error_dict, cls=self.json_encoder_class)
- return HttpResponseBadRequest(
- json_context, content_type='application/json')
- obtain_jwt_token = ObtainJSONWebToken.as_view()
|