from django.db.utils import IntegrityError
from django.http import HttpResponse,JsonResponse
from django.shortcuts import render
import json
from projects.models import Project
from django.forms.models import model_to_dict
from django.views import View
from django.views.decorators.csrf import csrf_exempt
class ProjectView(View):
def get(self,request):
"""
1、获取所有的项目数据,将获取的数据返回到前端
请求方法:GET
url路径:/projects
返回数据:json数组
:param request:
:return:
"""
qs = Project.objects.all()
projects_list = []
for pro in qs :
prokect_dict ={
'id':pro.id,
'name':pro.name,
'leader':pro.leader,
'desc':pro.desc
}
projects_list.append(prokect_dict)
return JsonResponse(projects_list,safe=False,json_dumps_params={"ensure_ascii":False})
def post(self,request):
"""
3、创建一条项目数据(前端传递json参数),并返回前端
请求方法:POST
url路径:/projects/id/
返回数据:json对象
:param request:
:return:
"""
ret = {
"msg":"参数异常",
"code":0
}
json_data = request.body.decode('utf-8')
try:
python_data = json.loads(json_data)
except json.JSONDecodeError:
return JsonResponse(ret,safe=False,json_dumps_params={"ensure_ascii:Fase"},status=400)
pro = Project.objects.create(**python_data)
one_dict = {
'id':pro.id,
'name':pro.name
}
return JsonResponse(one_dict,safe=False,json_dumps_params={"ensure_ascii":False})
class ProjectDetailView(View):
"""
1、获取所有的项目数据,将获取的数据返回到前端
请求方法:GET
url路径:/projects
返回数据:json数组
3、创建一条项目数据(前端传递json参数),并返回前端
请求方法:POST
url路径:/projects/id/
返回数据:json对象
4、更新一条项目数据(前端传递json参数),并返回前端
请求方法:POST
url路径:/projects/id/
返回数据:json对象
5、删除某一条数据,并返回前端
请求方法:DELETE
url路径:/projects/id/
返回数据:字符串
"""
def get(self,request,pk):
"""
2、获取某一条数据,由前端指定,如前端需要一条id为1的数据,并返回给前端
请求方法:GET
url路径:/projects/id/
返回数据:json对象
:param request:
:param pk:
:return:
"""
ret = {
"msg":"参数异常",
"code":0
}
try:
pro = Project.objects.get(pk=pk)
except Exception:
return JsonResponse(ret,status=400,json_dumps_params={"ensure_ascii":False})
one_dict = {
'id':pro.id,
'name':pro.name
}
return JsonResponse(one_dict,safe=False,json_dumps_params={"ensure_ascii":False})
def put(self,request,pk):
"""
4、更新一条项目数据(前端传递json参数),并返回前端
请求方法:POST
url路径:/projects/id/
返回数据:json对象
:param request:
:return:
"""
ret = {
"msg":"参数异常",
"code":0
}
json_data = request.body.decode('utf-8')
try:
python_data = json.loads(json_data)
except json.JSONDecodeError:
return JsonResponse(ret,safe=False,json_dumps_params={"ensure_ascii:Fase"},status=400)
try:
pro = Project.objects.get(pk=pk)
except Exception:
return JsonResponse(ret,status=400,json_dumps_params={"ensure_ascii":False})
pro.name = python_data.get('name')
pro.leader = python_data.get('leader')
pro.desc = python_data.get('desc')
one_dict = {
'id':pro.id,
'name':pro.name
}
return JsonResponse(one_dict,safe=False,json_dumps_params={"ensure_ascii":False})
def delete(self,request,pk):
"""
5、删除某一条数据,并返回前端
请求方法:DELETE
url路径:/projects/id/
返回数据:字符串
:param request:
:return:
"""
ret = {
"msg":"参数异常",
"code":0
}
try:
pro = Project.objects.get(pk=pk)
except Exception:
return JsonResponse(ret,status=400,json_dumps_params={"ensure_ascii":False})
pro.delete()
return JsonResponse(None,safe=False,status=204)
"""
五个接口有什么痛点:
1、代码冗余严重,不够简洁
2、数据校验极为麻烦,复用性非常差
3、编码没有统一规范,代码维护性差
4、多余获取多条仙姑数据的接口,功能缺失
a、没有分页功能
b、没有排序功能
c、没有过滤功能
5、整个接口,缺失的功能
a、没有认证授权功能
b、没有流量限制功能
c、传递参数类的类型单一,不支持表单传参
d、五个接口不能在同一类视图定义
Django restframework
"""