zoukankan      html  css  js  c++  java
  • django框架学习六:优化views.py文件,使用rest_framework中的APIVew和Response返回

    由于基础django中的View,不支持form表单传参,并且返回给前端的数据只能是json数据,所以本次优化,继承rest_framework中的APIView
    请求实例方法中的第二个参数request为rest_framework中的Request对象:
    request会根据请求头中的Content-Type自动解析
    使用request.data可以对POST、PUT、PATCH的请求体参数进行解析,不仅支持form传参,也支持json格式传参
    使用request.query_params获取查询字符串参数

    views.py文件优化后的代码如下:

    from rest_framework import status
    from rest_framework.views import APIView
    from rest_framework.response import Response
    
    from django.http import Http404
    
    from .models import Projects
    from .serializers import ProjectsModelSerializer
    
    
    class ProjectsList(APIView):
        def get(self, request):
            projects = Projects.objects.all()
            serializer = ProjectsModelSerializer(projects, many=True)
            return Response(serializer.data, status=status.HTTP_200_OK)
    
        def post(self, request):
            serializer = ProjectsModelSerializer(data=request.data)
            try:
                serializer.is_valid(raise_exception=True)
            except Exception as e:
                return Response(serializer.errors)
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
    
    
    class ProjectsDetail(APIView):
        def get_object(self, pk):
            try:
                return Projects.objects.get(id=pk)
            except Projects.DoesNotExist:
                raise Http404
    
        def get(self, request, pk):
            project = self.get_object(pk)
            serialzer = ProjectsModelSerializer(project)
            return Response(serialzer.data, status=status.HTTP_200_OK)
    
        def put(self, request, pk):
            project = self.get_object(pk)
            serialzer = ProjectsModelSerializer(instance=project, data=request.data)
            try:
                serialzer.is_valid(raise_exception=True)
            except:
                return Response(serialzer.errors)
            serialzer.save()
            return Response(serialzer.data, status=status.HTTP_201_CREATED)
    
        def delete(self, pk):
            project = self.get_object(pk)
            project.delete()
            return Response(None, status=status.HTTP_204_NO_CONTENT)

    projects子应用下的其它文件代码未改动,本次不再上传!

  • 相关阅读:
    Android百度地图
    Android开发性能优化大总结
    解析Android开发优化之:从代码角度进行优化的技巧
    073 HBASE的读写以及client API
    072 HBase的架构以及各个模块的功能
    071 HBase的安装部署以及简单使用
    070 关于HBase的概述
    069 Hue协作框架
    068 Oozie任务调度框架
    集合的知识点梳理(List,Set,不包含泛型)
  • 原文地址:https://www.cnblogs.com/benben-wu/p/12497446.html
Copyright © 2011-2022 走看看