22.Django_基础阶段综合演练_传统方式

传统编写CRUD

1.获取所有项目

已经创建好的model
projects/views.py中创建获取项目列表的接口:

class ProjectsList(View):
    def get(self,request):# get请求中,就算用不上request,也需要设置这个参数
        #1>从数据库获取所有项目信息,列表格式
        projects_qs = Projects.objects.all()
        #2.遍历返回的查询集,同一个查询集的内容组装成json,并且所有的json都存放在一个列表中,所有项目信息返回,Json格式
        #将数据库模型实例转化为字典类型(嵌套字典的列表)
        projects_list  =[]
        for  project in  projects_qs:
            one_dict = {
                'name':project.name,
                'leader':project.leader,
                'tester':project.tester,
                'programer':project.programer,
                'publish_app':project.publish_app,
                'desc':project.desc

            }
             # 序列化:把变量从内存中变成可存储或传输的过程(比如dump/dumps、把数据转成json/把数据写入内存)
            projects_list.append(one_dict)

       #3. JsonResponse第一个参数只能默认为dict字典,如果未其余类型需要修改safe=False,不然报错
        return JsonResponse(projects_list,safe=False)

总结:

  1. 从数据库获取所有项目信息,列表格式的查询集;json格式;
  2. 遍历返回的查询集,将数据库模型实例转化为字典类型(嵌套字典的列表),将字典存放在列表中:
  3. JsonResponse返回列表,注意JsonResponse第一个参数只能默认为dict字典,如果未其余类型需要修改safe=False,不然报错;

运行结果:
在这里插入图片描述

2.添加项目 :

    def post(self,request):
        #新增项目
        #1.从前端或者json格式的数据,转换为python中的类型;
        #为了严谨,需要做各种检验
        #比如:是否为json,传递的数据是否符合格式,必须传入的参数是否携带
        json_data = request.body.decode('utf-8')
        python_data= json.loads(json_data,encoding='utf-8')

        #2. 向数据库添加项目
        # new_project = Projects.objects.create(
        #     name=python_data['name'],
        #     leader=python_data['leader'],
        #     tester=python_data['tester'],
        #     programer=python_data['programer'],
        #     publish_app=python_data['publish_app'],
        #     desc=python_data['desc']
        #
        # )
        #字典拆包和上面一样
        project = Projects.objects.create(**python_data)

        #3.模型类对象转换为字典
        one_dict = {
            'name': project.name,
            'leader': project.leader,
            'tester': project.tester,
            'programer': project.programer,
            'publish_app': project.publish_app,
            'desc': project.desc

        }

        return JsonResponse(one_dict, safe=False)

运行后postman中进行调用:
在这里插入图片描述
数据库中添加成功:
在这里插入图片描述
注意项目名称重复会报错,提示码500;

3.获取项目详情:

class ProjectsDetail(View):
    def get(self,request,pk):
        """
   获取项目详情
        :param request:
        :param pk:  项目ID
        :return:
        """
        #1.校验前端传递的pk(项目ID)
        #2.获取项目ID
        project = Projects.objects.get(id=pk)
        #3.模型类对象转换为字典
        one_dict = {
            'name': project.name,
            'leader': project.leader,
            'tester': project.tester,
            'programer': project.programer,
            'publish_app': project.publish_app,
            'desc': project.desc

        }
        #4.json格式返回
        return JsonResponse(one_dict)

更新projects/views.py文件:

from . import views

## 指定当前应用的命名空间
app_name = 'projects'

urlpatterns = [
  
    path('',views.ProjectsList.as_view()),
    path('<int:pk>/',views.ProjectsDetail.as_view())



]

运行结果:
在这里插入图片描述

4.更新项目:

 def put(self,request,pk):
        # 1.校验前端传递的pk(项目ID),类型正整数,是否存在
        # 2.获取指定id为pk的待修改项目
        project = Projects.objects.get(id = pk)
        #3.从前端获取json格式的数据,
        # 为了严谨,需要做各种检验
        # 比如:是否为json,传递的数据是否符合格式,必须传入的参数是否携带
        json_data = request.body.decode('utf-8')
        python_data = json.loads(json_data, encoding='utf-8')

        #4.更新项目
        project.name= python_data['name']
        project.leader=python_data['leader']
        project.tester=python_data['tester']
        project.programer=python_data['programer']
        project.publish_app=python_data['publish_app']
        project.desc=python_data['desc']

        #保存
        project.save()

        #5.将模型类对象转换为字典
        one_dict = {
            'name': project.name,
            'leader': project.leader,
            'tester': project.tester,
            'programer': project.programer,
            'publish_app': project.publish_app,
            'desc': project.desc

        }
        # 6.json格式返回
        return JsonResponse(one_dict,status=201)

运行:
在这里插入图片描述

5.删除项目:

    def delete(self,request,pk):
        # 1.校验前端传递的pk(项目ID),类型正整数,是否存在
        # 2.获取指定id为pk的待修改项目
        project = Projects.objects.get(id=pk)
        project.delete()
        return JsonResponse(None,safe=False,status=204)

删除项目成功:
在这里插入图片描述

注意按照restful协议进行编写状态码:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章