基于DRF的增删改查操作 |
您所在的位置:网站首页 › drf架构 › 基于DRF的增删改查操作 |
基
于
D
R
F
的
增
删
改
查
操
作
基于DRF的增删改查操作
基于DRF的增删改查操作
一 APIView
from django.urls import path
from .views import PersontView
app_name = 'classview'
urlpatterns = [
# 列表: /person/ get
# 新增: /person/ post
# 详情: /person/[pk]/ get
# 修改: /person/[pk]/ put
# 删除: /person/[pk]/ delete
path('person/',PersontView.as_view()),
path('person//',PersontView.as_view()),
]
from rest_framework.views import APIView
from django.http import Http404
from rest_framework.response import Response
from apps.drf_demo.models import Person
from .serializers import PersonSerializer
from rest_framework import status
class PersontView(APIView):
"""
检索, 更新和删除一个merchant实例对象.
"""
def get_object(self, pk):
try:
return Person.objects.get(pk=pk)
except Person.DoesNotExist:
raise Http404
def get(self, request, pk=None):
if pk:
merchant= self.get_object(pk)
serializer = PersonSerializer(merchant)
return Response(serializer.data)
else:
queryset = Person.objects.all()
serializer = PersonSerializer(instance=queryset,many=True)
return Response(serializer.data)
def put(self, request, pk):
merchant = self.get_object(pk)
serializer = PersonSerializer(merchant, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, pk):
merchant= self.get_object(pk)
merchant.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
二 QuerySet使用
filterexcludeannotateorder_byvaluesvalues_listallselect_relatedprefetch_relateddeferonlygetcreateget_or_createbulk_createcountexistsdistinctupdatedelete
三 补充:
DRF中的Request和Response对象
在drf中,可以使用 Request和 Response对象来替代 django内置的 HttBRequest和 HttpResponse。替代 django的对象有很多好处。以下进行简单讲解。 Request对象:DRF 的 Request对象是从HttpRequest中拓展出来的,但是增加了一些其他的属性。其中最核心的用得最多的属性便是request.data 。request.data 比 request.POST更加灵活: request.POST :只能处理表单数据,获取通过POST方式上传上来的数据。request.data :可以处理任意的数据。可以获取通过POST 、PUT 、PATCH 等方式上传上来的数据。request.query_params :查询参数。比 request.GET更用起来更直白。 Response对象:Response可以自动的根据返回的数据类型来决定返回什么样的格式。并且会自动的监听如果是浏览器访问,那么会返回这个路由的信息。 @require_http_methods(['GET','POST']) def category(request): if requesthod =="GET": queryset = GoodsCategory.objects.all() serializer = GoodsCategorySerializer(instance=queryset,many=True) return JsonResponse(serializer.data,safe=False) else: serializer = GoodsCategorySerializer(data=request.POST) if serializer.is_valid(): serializer.save() return JsonResponse(serializer.data, status=200) else: return JsonResponse(serializer.errors, status=400) 状态码
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |