Я начал с проверки, работает ли сериализатор так, как я ожидал, но он не показал никакого вывода после выполнения кода.
from datetime import datetime
from django.utils import timezone
from django.utils.six import BytesIO
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
from toys.models import Toy
from toys.serializers import ToySerializer
toy_release_date = timezone.make_aware(datetime.now(),
timezone.get_current_timezone())
toy1 = Toy(name='Snoopy talking action figure',
description='Snoopy spearks five languages')
toy1,save()
toy2 = Toy(name='Hawaiian Barbie',
description= 'Barbie loves Hawaii',
release_date="")
toy2.save()
print(toy1.pk)
print(toy1.name)
print(toy1.created)
print(toy1.was_inclded_in_home)
print(toy2.pk)
print(toy2.name)
print(toy2.created)
print(toy2.was_included_in_home)
serializer_for_toy1 = ToySerializer(toy1)
print(serializer_for_toy1.data)
serializer_for_toy2 = ToySerializer(toy2)
print(serializer_for_toy2.data)
json_renderer = JSONRenderer()
toy1_rendered_into_json = jason_renderer.render(serializer_for_toy1.data)
toy2_rendered_into_json = json_renderer.render(serializer_for_toy2.data)
print(toy1_rendered_into_json)
print(toy2_rendered_into_json)
json_string_for_new_toy = '{"name":"Clash Royale play set","descriptions":"6 figures from Clash Royele"}'
json_bytes_for_new_toy = bytes(json_string_for_new_toy, encoding="UTF-8")
stream_for_new_toy = BytesOI(json_bytes_for_new_toy)
parser = JSONParser()
parsed_new_toy =parser.parse(stream_for_new_toy)
print(parsed_new_toy)
new_toy_serializer = ToySerializer(data=parsed_new_toy)
if new_toy_serializer.is_valid():
toy3 = new_toy_serializer.save()
print(toy3.name)
но потом я начал с создания моих представлений Django в сочетании с классами сериализатора.
from django.shortcuts import render
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
from rest_framework import status
from toys.models import Toy
from toys.serializers import ToySerializer
class JSONResponse(HttpResponse):
def __init__(self, data, **kwargs):
content = JSONRenderer().render(data)
kwargs['content_type'] ='application/json'
super(JSONResponse, self).__init__(content, **kwargs)
@csrf_exempt
def toy_list(request):
if request.method == 'GET':
toys = Toy.objects.all()
toys_serializer = ToySerializer(toys, many=True)
return JSONResponse(toys_serializer.data)
elif request.method == 'POST':
toy_data = JSONParser().parse(request)
toys_serializer = ToySerializer(data=toy_data)
if toys_serializer.is_valid():
toys_serializer.save()
return JSONResponse(toy_serializer.data, \
status=status.HTTP_201_CREATED)
return JSONResponse(toy_serializer.errors, \
status=status.HTTP_400_BAD_REQUEST)
@csrf_exempt
def toy_detail(request, pk):
try:
toy = Toy.objects.get(pk=pk)
except Toy.DoesNotExist:
return HttpResponse(status=status.HTTP_404_NOT_FOUND)
if request.method == 'GET':
toy_serializer = ToySerializer(toy)
return JSONResponse(toy_serializer.data)
elif request.method == 'PUT':
toy_data = JSONParser().parse(request)
toy_serializer = ToySerializer(toy, data=toy_data)
if toy_serializer.is_valid():
toy_serializer.save()
return JSONResponse(toy_serializer.data)
return JSONResponse(toy_serializer.errors, \
status=status.HTTP_400_BAD_REQUEST)
elif request.method == 'DELETE' :
toy.delete()
return HttpResponse(status=status.HTTP_204_NO_CONTENT)
Вот мой контент serializer.py, но после того, как я сделаю запрос к HTTP, не 'не отображать содержимое в этом serializer.py.
from rest_framework import serializers
from toys.models import Toy
class ToySerializer(serializers.Serializer):
pk = serializers.IntegerField(read_only=True)
name = serializers.CharField(max_length=150)
description = serializers.CharField(max_length=250)
release_date = serializers.DateTimeField()
toy_category = serializers.CharField(max_length=200)
was_included_in_home = serializers.BooleanField(required=False)
def create(self,validated_data):
return Toy.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.name = validated_data.get('name',instance.name)
instance.description = validated_data.get('description', instance.description)
instance.release_date = validated_data.get('release_date',instance.release_date)
instance.toy_category = validated_data.get('toy_category',instance.toy_category)
instance.was_included_in_home = validated_data.get('was_included_in_home',instance.was_included_in_home)
instance.save()
return instance
после создания моего представления и попытки сделать запрос HTTP GET с помощью curl, я не получаю вывод JSONResponse, но он отображает только пустой словарь (квадратная скобка, []) я ожидал, что он отобразит содержимое в файле serializer.py, и мне интересно, что не так с моими кодами. Вот код для выполнения HTTP-запроса.
curl -x GET localhost:8000/toys/
#With this code it shows only the header without the JSON response and an empty [].
curl -ix GET localhost:8000/toys/
from datetime import datetime
from django.utils import timezone
from django.utils.six import BytesIO
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
from toys.models import Toy
from toys.serializers import ToySerializer
toy_release_date = timezone.make_aware(datetime.now(),
timezone.get_current_timezone())
toy1 = Toy(name='Snoopy talking action figure',
description='Snoopy spearks five languages')
toy1,save()
toy2 = Toy(name='Hawaiian Barbie',
description= 'Barbie loves Hawaii',
release_date="")
toy2.save()
print(toy1.pk)
print(toy1.name)
print(toy1.created)
print(toy1.was_inclded_in_home)
print(toy2.pk)
print(toy2.name)
print(toy2.created)
print(toy2.was_included_in_home)
serializer_for_toy1 = ToySerializer(toy1)
print(serializer_for_toy1.data)
serializer_for_toy2 = ToySerializer(toy2)
print(serializer_for_toy2.data)
json_renderer = JSONRenderer()
toy1_rendered_into_json = jason_renderer.render(serializer_for_toy1.data)
toy2_rendered_into_json = json_renderer.render(serializer_for_toy2.data)
print(toy1_rendered_into_json)
print(toy2_rendered_into_json)
json_string_for_new_toy = '{"name":"Clash Royale play set","descriptions":"6 figures from Clash Royele"}'
json_bytes_for_new_toy = bytes(json_string_for_new_toy, encoding="UTF-8")
stream_for_new_toy = BytesOI(json_bytes_for_new_toy)
parser = JSONParser()
parsed_new_toy =parser.parse(stream_for_new_toy)
print(parsed_new_toy)
new_toy_serializer = ToySerializer(data=parsed_new_toy)
if new_toy_serializer.is_valid():
toy3 = new_toy_serializer.save()
print(toy3.name)