基于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/<int:pk>/',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使用

  1. filter
  2. exclude
  3. annotate
  4. order_by
  5. values
  6. values_list
  7. all
  8. select_related
  9. prefetch_related
  10. defer
  11. only
  12. get
  13. create
  14. get_or_create
  15. bulk_create
  16. count
  17. exists
  18. distinct
  19. update
  20. delete

三 补充:

DRF中的Request和Response对象


drf中,可以使用 RequestResponse对象来替代 django内置的 HttBRequestHttpResponse。替代 django的对象有很多好处。以下进行简单讲解。


Request对象:

DRFRequest对象是从HttpRequest中拓展出来的,但是增加了一些其他的属性。其中最核心的用得最多的属性便是request.datarequest.datarequest.POST更加灵活:

  1. request.POST :只能处理表单数据,获取通过POST方式上传上来的数据。
  2. request.data :可以处理任意的数据。可以获取通过POST 、PUT 、PATCH 等方式上传上来的数据。
  3. request.query_params :查询参数。比 request.GET更用起来更直白。

Response对象:

Response可以自动的根据返回的数据类型来决定返回什么样的格式。并且会自动的监听如果是浏览器访问,那么会返回这个路由的信息。


@require_http_methods(['GET','POST'])
def category(request):
    if request.method =="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)

状态码

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值