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

Posted

技术标签:

【中文标题】我们如何使用基于函数的视图在 django rest 框架中发布数据?【英文标题】:How do we POST data in django rest framework using function based views? 【发布时间】:2021-02-28 18:31:17 【问题描述】:

我是 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 表中,我们如何在 FDV 中做到这一点?

【问题讨论】:

【参考方案1】:

试试这个

@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

【讨论】:

【参考方案2】:

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()
    

【讨论】:

以上是关于我们如何使用基于函数的视图在 django rest 框架中发布数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中使用基于类的视图

Django基于PythonWeb的Django框架设计实现天天生鲜系统-4创建视图

Django中基于函数的视图和基于类的视图以及路由传参

Django 如何将 slug 表示为基于函数的视图的 ID

Django编写RESTful API:基于类的视图

如何让 reverse() 在基于函数的视图中工作