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協議進行編寫狀態碼:

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