Django-ORM框架-阶段练手小项目

Django阶段练手小项目


需求

实现数据库的增删改查接口:

接口类型url接口详情
GET/projects/获取项目列表数据(json数组形式返回)
POST/projects/创建一条项目数据(以json形式传递参数,同时需要将创建成功
GET/projects/int:pk/获取一条项目详情数据(json对象形式返回)
PUT/projects/int:pk/更新一条项目数据(以json形式传递参数,同时需要将更新成功之后的数据以json形式返回)
DELETE/projects/int:pk/删除一条项目数据(返回删除成功json数据)

代码实现

projects/views.py

import json
from django.http import JsonResponse
from django.views import View
from projects.models import Projects


err_msg = {
    "status": False,
    "msg": "参数有误",
    "num": 0
}


class ProjectView(View):

    def get(self, request):
        """
        获取项目列表数据
        :return: 返回获取项目列表数据
        """
        # 1.获取全部数据
        qs = Projects.objects.all()

        # 2.获取到的数据转化为json数据
        projects_list = []
        obj: Projects
        for obj in qs:
            projects_list.append({
                'id': obj.id,
                'name': obj.name,
                'leader': obj.leader
            })

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

    def post(self, request):
        """
        创建一条项目数据(以json形式传递参数)
        :return: 将创建成功之后的数据以json形式返回
        """
        # 1.获取前端传来的json数据
        try:
            json_dict = json.loads(request.body.decode('utf-8'))
        except Exception:
            return JsonResponse(err_msg, json_dumps_params={"ensure_ascii": False}, status=400)

        # 2.对数据进行校验
        if 'name' not in json_dict or len(json_dict['name']) > 20 or len(json_dict['leader']) > 10:
            return JsonResponse(err_msg, json_dumps_params={"ensure_ascii": False}, status=400)

        # 3.保存数据
        qs = Projects.objects.create(**json_dict)
        return JsonResponse(json_dict, safe=False, json_dumps_params={"ensure_ascii": False})


class ProjectParameterView(View):
    def get(self, request, pk):
        """
        获取一条项目详情数据
        :param pk: 项目id
        :return: 返回获取到的项目详情数据
        """
        # 1.获取数据
        try:
            data = Projects.objects.get(id=pk)
        except Exception:
            return JsonResponse(err_msg, json_dumps_params={"ensure_ascii": False}, status=400)

        # 2.将数据转为json格式
        json_dict = []
        json_dict.append({
            'id': data.id,
            'name': data.name,
            'leader': data.leader
        })

        # 3.将数据返回前端
        return JsonResponse(json_dict, safe=False, json_dumps_params={"ensure_ascii": False})

    def put(self, request, pk):
        """
        更新一条项目数据(以json形式传递参数)
        :param pk: 项目id
        :return: 将更新成功之后的数据以json形式返回
        """
        # 1.获取数据
        data = Projects.objects.filter(id=pk)
        if len(data) == 0:
            return JsonResponse(err_msg, json_dumps_params={"ensure_ascii": False}, status=400)

        # 2.读取前端传来的json数据
        json_dict = json.loads(request.body.decode('utf-8'))

        # 3.更新数据
        data.update(**json_dict)
        return JsonResponse(json_dict, safe=False, json_dumps_params={"ensure_ascii": False})

    def delete(self, request, pk):
        """
        删除一条项目数据
        :param pk: 项目id
        :return: 返回删除成功json数据
        """
        # 1.获取数据
        try:
            data = Projects.objects.get(id=pk)
        except Exception:
            return JsonResponse(err_msg, json_dumps_params={"ensure_ascii": False}, status=400)

        # 2.将数据转为json格式
        json_dict = []
        json_dict.append({
            'id': data.id,
            'name': data.name,
            'leader': data.leader
        })

        # 3.删除数据
        data.delete()
        return JsonResponse(json_dict, safe=False, json_dumps_params={"ensure_ascii": False})

痛点分析

  1. 代码冗余严重,不够简洁

  2. 数据校验极为麻烦(if嵌套层级非常多),且复用性比较差

  3. 编码没有统一的规范,代码维护性差

  4. 获取列表数据时,有很多缺失的功能
    a.没有提供分页功能
    b.没有提供过滤功能
    c.没有提供排序功能

  5. 整个接口,也有功能缺失
    a.没有提供认证授权功能
    b.没有提供限流功能(反爬虫)
    c.传递参数的形式单一,不支持表单传参
    d.5个接口处于不同的类视图中

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值