Return 不同的响应或数据取决于方法 - Django 休息框架
Return different reponse or data depending on method - Django rest framework
请帮忙。我需要做的是根据方法获得不同的响应或数据——像这样:
if request.method == 'POST':
return all
the items created including the last one (actually it returns only >the last item created)
else if request.method == 'PUT':
return the last item updated
Views.py
class RubroViewSet(viewsets.ModelViewSet):
queryset = Rubro.objects.all()
serializer_class = RubroSerializer
models.py
class Rubro(models.Model):
nombre = models.CharField(max_length=50)
descripcion = models.TextField()
class Meta:
verbose_name_plural = 'Rubros'
db_table = "core_rubros"
def __str__(self):
return self.nombre
serializers.py
class RubroSerializer(serializers.ModelSerializer):
class Meta:
model = Rubro
fields = '__all__'
使用 viewsets.Viewset 是一种简单的方法。
http://www.django-rest-framework.org/api-guide/viewsets/
或使用@detail_route()
@detail_route(methods=['post'])
def some_method(self, request):
serializer = RubroSerializer(data=request.data)
if serializer.is_valid():
return Response({'status': 'success'})
else:
return Response(serializer.errors,
status=status.HTTP_400_BAD_REQUEST)
1.Way:
您可以使用 "yield" 而不是 "return"。
这可能是支持...
2.Way:
def __str__(self):
for n in self:
return self.n
其实viewset允许你在viewset中实现create
和update
方法来控制不同类型请求的逻辑。在你的情况下,你可以这样做:
class RubroViewSet(viewsets.ModelViewSet):
queryset = Rubro.objects.all()
serializer_class = RubroSerializer
# POST
def create(self, request):
super().create(request)
serializer = self.serializer(self.queryset, many=True)
return Response(serializer.data, status=status.HTTP_201_CREATED)
# PUT
def update(self, request, pk=None):
return super().update(request, pk)
请帮忙。我需要做的是根据方法获得不同的响应或数据——像这样:
if request.method == 'POST':
return all the items created including the last one (actually it returns only >the last item created)
else if request.method == 'PUT':
return the last item updated
Views.py
class RubroViewSet(viewsets.ModelViewSet):
queryset = Rubro.objects.all()
serializer_class = RubroSerializer
models.py
class Rubro(models.Model):
nombre = models.CharField(max_length=50)
descripcion = models.TextField()
class Meta:
verbose_name_plural = 'Rubros'
db_table = "core_rubros"
def __str__(self):
return self.nombre
serializers.py
class RubroSerializer(serializers.ModelSerializer):
class Meta:
model = Rubro
fields = '__all__'
使用 viewsets.Viewset 是一种简单的方法。 http://www.django-rest-framework.org/api-guide/viewsets/
或使用@detail_route()
@detail_route(methods=['post'])
def some_method(self, request):
serializer = RubroSerializer(data=request.data)
if serializer.is_valid():
return Response({'status': 'success'})
else:
return Response(serializer.errors,
status=status.HTTP_400_BAD_REQUEST)
1.Way: 您可以使用 "yield" 而不是 "return"。 这可能是支持...
2.Way:
def __str__(self):
for n in self:
return self.n
其实viewset允许你在viewset中实现create
和update
方法来控制不同类型请求的逻辑。在你的情况下,你可以这样做:
class RubroViewSet(viewsets.ModelViewSet):
queryset = Rubro.objects.all()
serializer_class = RubroSerializer
# POST
def create(self, request):
super().create(request)
serializer = self.serializer(self.queryset, many=True)
return Response(serializer.data, status=status.HTTP_201_CREATED)
# PUT
def update(self, request, pk=None):
return super().update(request, pk)