哈哈嘻嘻1

from django.db.utils import IntegrityError

from django.http import HttpResponse,JsonResponse
from django.shortcuts import render
import json
from projects.models import Project
from django.forms.models import model_to_dict

# Create your views here.
from django.views import View
from django.views.decorators.csrf import csrf_exempt

class ProjectView(View):

    def get(self,request):
        """
        1、获取所有的项目数据,将获取的数据返回到前端
        请求方法:GET
        url路径:/projects
        返回数据:json数组
        :param request:
        :return:
        """

        #   1、获取所有项目数据 → 序列化过程
        qs = Project.objects.all()

        #   2、将模型类对象转化为python中的字典类型(嵌套字典列表)
        projects_list = []
        for pro in qs :
            prokect_dict ={
                'id':pro.id,
                'name':pro.name,
                'leader':pro.leader,
                'desc':pro.desc
            }
            projects_list.append(prokect_dict)

        #   3、返回数据
        return JsonResponse(projects_list,safe=False,json_dumps_params={"ensure_ascii":False})

    def post(self,request):
        """
        3、创建一条项目数据(前端传递json参数),并返回前端
        请求方法:POST
        url路径:/projects/id/
        返回数据:json对象
        :param request:
        :return:
        """

        ret = {
            "msg":"参数异常",
            "code":0
        }

        #   1、获取json格式的字符串数据
        json_data = request.body.decode('utf-8')
        #比如不是json传参,比如传参为空
        try:
            python_data = json.loads(json_data)
        except json.JSONDecodeError:
            return JsonResponse(ret,safe=False,json_dumps_params={"ensure_ascii:Fase"},status=400)

        #   2、数据校验,非常复杂
        #       a、是否传递数据
        #       b、是否传递json格式的参数
        #       c、是否传递合法参数(参数类型、参数个数、参数的其他约束)

        #   3、创建数据,返回模型类对象
        #   将前端传递的数据转化为python中的模型对象,这个过程称为反序列
        # 建议不要使用python_data['name']会报错,python_data.get('name')返回为空
        # Project.objects.create(name=python_data.get('name'),leader=python_data.get('leader'))
        pro = Project.objects.create(**python_data)

        #   4、将模型类对象转换为python中的字典类型并返回
        one_dict = {
            'id':pro.id,
            'name':pro.name
        }
        return JsonResponse(one_dict,safe=False,json_dumps_params={"ensure_ascii":False})

class ProjectDetailView(View):
    """
            1、获取所有的项目数据,将获取的数据返回到前端
                请求方法:GET
                url路径:/projects
                返回数据:json数组

            3、创建一条项目数据(前端传递json参数),并返回前端
                请求方法:POST
                url路径:/projects/id/
                返回数据:json对象
            4、更新一条项目数据(前端传递json参数),并返回前端
                请求方法:POST
                url路径:/projects/id/
                返回数据:json对象
            5、删除某一条数据,并返回前端
                请求方法:DELETE
                url路径:/projects/id/
                返回数据:字符串
    """

    def get(self,request,pk):
        """
          2、获取某一条数据,由前端指定,如前端需要一条id为1的数据,并返回给前端
                请求方法:GET
                url路径:/projects/id/
                返回数据:json对象

        :param request:
        :param pk:
        :return:
        """
        # 1、数据校验(校验项目id是否存在)

        ret = {
            "msg":"参数异常",
            "code":0
        }


        try:
            pro = Project.objects.get(pk=pk)
        except Exception:
            return  JsonResponse(ret,status=400,json_dumps_params={"ensure_ascii":False})

        #   2、将模型类对象转化为python中的字典类型(嵌套字典列表)
        #   反序列化过程
        one_dict = {
            'id':pro.id,
            'name':pro.name
        }
        return JsonResponse(one_dict,safe=False,json_dumps_params={"ensure_ascii":False})

    def put(self,request,pk):
        """
        4、更新一条项目数据(前端传递json参数),并返回前端
            请求方法:POST
            url路径:/projects/id/
            返回数据:json对象
        :param request:
        :return:
        """

        ret = {
            "msg":"参数异常",
            "code":0
        }

        #   1、获取json格式的字符串数据
        json_data = request.body.decode('utf-8')
        #比如不是json传参,比如传参为空
        try:
            python_data = json.loads(json_data)
        except json.JSONDecodeError:
            return JsonResponse(ret,safe=False,json_dumps_params={"ensure_ascii:Fase"},status=400)

        try:
            pro = Project.objects.get(pk=pk)
        except Exception:
            return  JsonResponse(ret,status=400,json_dumps_params={"ensure_ascii":False})

        #   2、数据校验,非常复杂
        #       a、是否传递数据
        #       b、是否传递json格式的参数
        #       c、是否传递合法参数(参数类型、参数个数、参数的其他约束)

        #   3、更新数据
        pro.name = python_data.get('name')
        pro.leader = python_data.get('leader')
        pro.desc = python_data.get('desc')

        one_dict = {
            'id':pro.id,
            'name':pro.name
        }
        return JsonResponse(one_dict,safe=False,json_dumps_params={"ensure_ascii":False})

    def delete(self,request,pk):
        """
        5、删除某一条数据,并返回前端
            请求方法:DELETE
            url路径:/projects/id/
            返回数据:字符串
        :param request:
        :return:
        """
        ret = {
            "msg":"参数异常",
            "code":0
        }

        try:
            pro = Project.objects.get(pk=pk)
        except Exception:
            return  JsonResponse(ret,status=400,json_dumps_params={"ensure_ascii":False})

        pro.delete()

        return  JsonResponse(None,safe=False,status=204)

    """
    五个接口有什么痛点:
    1、代码冗余严重,不够简洁
    2、数据校验极为麻烦,复用性非常差
    3、编码没有统一规范,代码维护性差
    4、多余获取多条仙姑数据的接口,功能缺失
        a、没有分页功能
        b、没有排序功能
        c、没有过滤功能
    5、整个接口,缺失的功能
        a、没有认证授权功能
        b、没有流量限制功能
        c、传递参数类的类型单一,不支持表单传参
        d、五个接口不能在同一类视图定义
        
    Django restframework
    """


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值