views02

import json
from django.shortcuts import render
from django.http import JsonResponse, Http404
from django.views import View
from interfaces.models import InterFaces
from .models import Projects
from django.db.models import Q, Count
from .serializers import ProjectsSerializer, Projects_ModelSerializer
from interfaces.serializers import InterFaces_ModelSerializer


class ProjectDetailView(View):

def get_object(self, pk):
ret = {
'msg': '数据异常',
'code': 0,
}

try:
return Projects.objects.get(id=pk)
except Exception:
raise Http404

def get(self, request, pk):

project = self.get_object(pk)

"""
将模型类对象转化成instance,会返回一个序列化器类对象;
使用序列化类对象的data属性,获取序列化后的数据(字典或嵌套字典的列表);
如果传递的是查询集对象,需加上many=True。
"""
# serializer_obj = ProjectsSerializer(instance=project)
# 序列化器对象:ProjectsSerializer // Projects_ModelSerializer
serializer_obj = Projects_ModelSerializer(instance=project)
return JsonResponse(serializer_obj.data, json_dumps_params={'ensure_ascii': False}, status=200)

# interface_obj = InterFaces.objects.get(id=pk)
# serializer_obj = InterFaces_ModelSerializer(instance=interface_obj)
# return JsonResponse(serializer_obj.data, json_dumps_params={'ensure_ascii': False}, status=200)

def put(self, requests, pk):

ret = {
'msg': '数据异常',
'code': 0,
}

# project = Projects.objects.get(id=pk)
project = self.get_object(pk)

# json数据校验
json_str_data = requests.body.decode('utf-8')
try:
python_data = json.loads(json_str_data)
except json.JSONDecodeError:
return JsonResponse(ret, json_dumps_params={'ensure_ascii': False}, status=400)

# 同时给instance和data传参,调用serializer_obj01.save()后,会执行序列化器对象的【update方法】
serializer_obj01 = Projects_ModelSerializer(instance=project, data=python_data)
# serializer_obj01 = ProjectsSerializer(instance=project, data=python_data)

try:
serializer_obj01.is_valid(raise_exception=True)
except:
ret.update(serializer_obj01.errors)
return JsonResponse(ret, json_dumps_params={'ensure_ascii': False}, status=400)

# project.id = serializer_obj01.validated_data.get('id')
# project.name = serializer_obj01.validated_data.get('name')
# project.leader = serializer_obj01.validated_data.get('leader')
# project.desc = serializer_obj01.validated_data.get('desc')
# project.save()
"""
serializer_objtb_projects01.save(age=18, name='过往皆为序章')
若给save()传参,参数会自动自动合并到(序列化器)validated_data中
若传递参数重复,会覆盖之前前端传递参数
"""
# serializer_obj01.save(age=18, name='过往皆为序章')
serializer_obj01.save()

# serializer_obj = ProjectsSerializer(instance=project)
return JsonResponse(serializer_obj01.data, json_dumps_params={'ensure_ascii': False}, status=200)

def delete(self, requests, pk):

one_qs = self.get_object(pk)

one_qs.delete()

return JsonResponse(None, safe=False, status=204)


class ProjectView(View):

def get(self, requests):
qs = Projects.objects.all()

serializer_obj = ProjectsSerializer(instance=qs, many=True)
# serializer_obj = Projects_ModelSerializer(instance=qs, many=True)
return JsonResponse(serializer_obj.data, safe=False, json_dumps_params={'ensure_ascii': False}, status=200)

def post(self, requests):
json_str_data = requests.body.decode('utf-8')

ret = {
'msg': '数据异常',
'code': 0,
}

# json校验
try:
python_data = json.loads(json_str_data)
except json.JSONDecodeError:
return JsonResponse(ret, json_dumps_params={'ensure_ascii': False}, status=400)

# serializer_obj01 = ProjectsSerializer(data=python_data)
serializer_obj01 = Projects_ModelSerializer(data=python_data)
"""【新增InterFaces数据】"""
# serializer_obj01 = InterFaces_ModelSerializer(data=python_data)

try:
serializer_obj01.is_valid(raise_exception=True)
except:
ret.update(serializer_obj01.errors)
return JsonResponse(ret, json_dumps_params={'ensure_ascii': False}, status=400)

# serializer_obj01.save(),会直接调用序列化器中的【create方法】
serializer_obj01.save()

# serializer_obj = ProjectsSerializer(instance=project)
return JsonResponse(serializer_obj01.data, json_dumps_params={'ensure_ascii': False}, status=200)
posted @ 2021-01-05 13:44  zxy_ang  阅读(90)  评论(0)    收藏  举报