我们如何使用基于函数的视图在 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基于PythonWeb的Django框架设计实现天天生鲜系统-4创建视图