傳統編寫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)
總結:
- 從數據庫獲取所有項目信息,列表格式的查詢集;json格式;
- 遍歷返回的查詢集,將數據庫模型實例轉化爲字典類型(嵌套字典的列表),將字典存放在列表中:
- 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協議進行編寫狀態碼: