我们如何 POST 使用基于函数的视图在 django rest 框架中获取数据?

How do we POST data in django rest framework using function based views?

我是 django rest 框架 (DRF) 的新手,我需要使用基于函数的视图 (FDV) POST 一些数据。我通过这种方式成功使用了 GET 方法,但不知道如何使用 POST 方法向数据库添加值。

# app/models.py

class Item(models.Model):
    name = models.CharField(max_length=50)
    quantity = models.IntegerField()
    price = models.FloatField()


# app/urls.py

urlpatterns = [
path('', views.get_data_list, name='list'),
path('post_val/', views.post_data, name='post_val'), # need to implement
]

# app/serializers.py

class ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item
        fields = ('id', 'name', 'quantity','price')



# app/views.py

from django.http.response import JsonResponse
from rest_framework.parsers import JSONParser 
 
from .models import Item
from .serializers import ItemSerializer
from rest_framework.decorators import api_view

@api_view(['GET',])
def get_data_list(request):
    if request.method == 'GET':
        items = Item.objects.all()
    items_serializer = ItemSerializer(items, many=True)
    return JsonResponse(items_serializer.data, safe=False)

@api_view(['POST',])
def post_data(request):
    #TO DO

如果我想使用 POST 方法将像这样的新数据 {name:"Television", quantity:15, price:999.99} 添加到 Item table,我们如何在 FDV 中做到这一点?

试试这个

@api_view(['POST',])
def post_data(request):
    serializer = ItemSerializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    serializer.save()
    return Response(serializer.data)

附带说明一下,您可以使用 DRF 的 Response 对象来返回响应。它会根据您的配置自动转换为 JSON 或 XML。 通过

导入
from rest_framework.response import Response

django-rest-framework 将发布的数据放在request.data

简而言之,您可以从那里检索数据并创建对象:

@api_view(['POST',])
def post_data(request):
    item_serializer = ItemSerializer(data=request.data)
    if item_serializer.is_valid():
        item = item_serializer.save()