Thursday, 15 September 2022

Django function based viewAPI how to get request data and how to validate request input data

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