django 데이터 API 인터페이스의 drf 변환
실현되다
방식 1:django 자체의view
from django.views.generic.base import View
from goods.models import Goods
from django.http import HttpResponse
import json
class GoodListView(View):
def get(self, request):
"""
django view
:param request
:return
"""
json_list = []
goods = Goods.objects.all()[:10]
for good in goods:
json_dict = {}
json_dict['name'] = good.name
json_dict['category'] = good.category.name
json_dict['market_price'] = good.market_price
json_list.append(json_dict)
return HttpResponse(json.dumps(json_list), content_type='application/json')
방법2:django:modelto_dict
from django.views.generic.base import View
from goods.models import Goods
from django.http import HttpResponse
import json
from django.forms.models import model_to_dict
class GoodListView(View):
def get(self, request):
"""
django view
:param request
:return
"""
json_list = []
goods = Goods.objects.all()[:10]
for good in goods:
json_dict = model_to_dict(good)
json_list.append(json_dict)
return HttpResponse(json.dumps(json_list), content_type='application/json')
방식3:django:serializers
from django.views.generic.base import View
from goods.models import Goods
from django.http import HttpResponse
import json
from django.core import serializers
class GoodListView(View):
def get(self, request):
"""
django view
:param request
:return
"""
json_list = []
goods = Goods.objects.all()[:10]
json_data = serializers.serialize('json', goods)
json_data = json.loads(json_data)
return HttpResponse(json.dumps(json_data), content_type='application/json')
방식 4: django: Json Response
from django.views.generic.base import View
from goods.models import Goods
from django.http import JsonResponse
import json
from django.core import serializers
class GoodListView(View):
def get(self, request):
"""
django view
:param request
:return
"""
goods = Goods.objects.all()[:10]
json_data = serializers.serialize('json', goods)
json_data = json.loads(json_data)
return JsonResponse(json_data, safe=False)
drf goods 목록 구현
방법 1: APIView + serializers.Serializer
from rest_framework.views import APIView
from rest_framework import serializers
class GoodsSerializer(serializers.Serializer):
name = serializers.CharField(required=True, max_length=100)
click_num = serializers.IntegerField(default=0)
class Goods1ListView(APIView):
'''List'''
def get(self, request, format=None):
goods = Goods.objects.all()[:10]
goods_serializer = GoodsSerializer(goods, many=True)
return Response(goods_serializer.data)
APIView + serializers.Serializer goods 만들기
from rest_framework.views import APIView
from rest_framework import serializers
class GoodsSerializer(serializers.Serializer):
name = serializers.CharField(required=True, max_length=100)
click_num = serializers.IntegerField(default=0)
def create(self, validated_data):
"""
Create and return a new 'good' instance, given the validated data.
"""
return Goods.objects.create(**validated_data)
class Goods1ListView(APIView):
'''List'''
def get(self, request, format=None):
goods = Goods.objects.all()[:10]
goods_serializer = GoodsSerializer(goods, many=True)
def post(self, request, format=None):
serializer = Goods1Serializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Serializers로 변경합니다.ModelSerializer
class Goods1Serializer(serializers.ModelSerializer):
class Meta:
model = Goods
fields = ['id', 'click_num', 'add_time', 'market_price']
네스트를 시리얼화하려면 다음과 같이 하십시오.
class Category1Serializer(serializers.ModelSerializer):
class Meta:
model = GoodsCategory
fields = '__all__'
class Goods1Serializer(serializers.ModelSerializer):
category = Category1Serializer()
class Meta:
model = Goods
fields = '__all__'
mixins + generics:
class Goods1ListView(mixins.ListModelMixin, generics.GenericAPIView):
"""
"""
queryset = Goods.objects.all()[:10]
serializer_class = Goods1Serializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
페이지 나누기:
class GoodsPagination(PageNumberPagination):
"""
-
"""
page_size = 12
page_size_query_param = 'page_size'
page_query_param = 'page'
max_page_size = 100
class Goods1ListView(mixins.ListModelMixin, generics.GenericAPIView):
#
pagination_class = GoodsPagination
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.