传统编写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协议进行编写状态码: