How to get request data
https://stackoverflow.com/questions/45693672/authtokenserializer-invalid-data-expected-a-dictionary-but-got-request-djang
serializer = self.serializer_class(data=request.data)
How to use serializer for function based views
https://blog.kdpisda.in/how-to-validate-the-raw-json-post-request-body-in-django-3c72e4513658
serializers.py
| from rest_framework import serializers | |
| class NestedSerializer(serializers.Serializer): | |
| nested = serializers.BooleanField(required=True) | |
| value = serializers.CharField(required=True) | |
| class DataSerializer(serializers.Serializer): | |
| string_field = serializers.CharField(required=True) | |
| number_field = serializers.IntegerField(required=True) | |
| float_field = serializers.FloatField(required=True) | |
| dict_field = NestedSerializer(required=True) | |
| url_field = serializers.URLField(required=True) | |
| email_field = serializers.EmailField(required=True) | |
| date_field = serializers.DateField(required=True) | |
| time_field = serializers.TimeField(required=True) | |
| list_field = serializers.ListField(required=True) |
validators.py
| from demo import serializers | |
| def validate_api(request): | |
| res = {} | |
| res["success"] = True | |
| res["errors"] = None | |
| res["details"] = None | |
| validation = serializers.DataSerializer(data=request) | |
| if validation.is_valid(): | |
| res["success"] = True | |
| else: | |
| res["success"] = False | |
| res["details"] = "Bad Request Body" | |
| res["errors"] = validation.errors | |
| return res |
views.py
| from django.shortcuts import render | |
| from rest_framework import status | |
| from django.http import JsonResponse | |
| from . import validators | |
| from django.views.decorators.csrf import csrf_exempt | |
| from django.views.decorators.http import require_http_methods | |
| import json | |
| # Create your views here. | |
| @csrf_exempt | |
| @require_http_methods(["POST"]) | |
| def simple_api(request): | |
| res = {} | |
| status_code = status.HTTP_200_OK | |
| try: | |
| req = json.loads(request.body.decode("utf-8")) | |
| except Exception as e: | |
| res["details"] = "Invalid request body" | |
| validation = validators.validate_api(req.data) | |
| if not validation["success"]: | |
| res["errors"] = validation["errors"] | |
| status_code = status.HTTP_400_BAD_REQUEST | |
| else: | |
| res["details"] = "Validation passed" | |
| return JsonResponse(res, status=status_code) |
No comments:
Post a Comment