增删改查(原生)
Django 3.2
# -*- encoding: utf-8 -*-"""@Author:暗香彻骨.沐之杰 (Addis)@Contact : qyx01@qq.com@Time: 2022/6/26 17:05@Software: PyCharm@File: views_dj.py@Description:"""import jsonimport datetimefrom django.views import Viewfrom .models import DbStudentfrom django.http import HttpResponse, JsonResponsefrom addis_utils.api_utils import api_resultfrom django.views.decorators.csrf import csrf_exempt"""GET 查询所有 http://127.0.0.1:8081/demo/studentPOST 新增 http://127.0.0.1:8081/demo/student/GET 查询id http://127.0.0.1:8081/demo/student/107/PUT 更新 http://127.0.0.1:8081/demo/student/107/DELETE 删除(逻辑或物理) http://127.0.0.1:8081/demo/student/10003322/"""class BookListView(View):"""列表视图"""def get(self, request):"""查询所有"""# 1、查询出所有记录的模型list_student = DbStudent.objects.all()# 执行原生SQL# list_student = DbStudent.objects.raw(# "SELECT * FROM db_student"# )# 2、遍历查询集,把模型对象转成字典list_stu = []for stu in list_student:dict_student = {'id': stu.id,'name': stu.name,'age': stu.age,'sex': stu.sex,'class_name': stu.class_name,'description': stu.description if stu.description else '','create_time': stu.create_time,'updated_time': stu.updated_time}list_stu.append(dict_student)api_result["code"] = 200api_result["msg"] = "success"api_result["count"] = len(list_stu)api_result["data"] = list_stu# 3、响应return JsonResponse(api_result, json_dumps_params={'ensure_ascii': False},content_type="application/json; charset=utf-8",status=200, safe=False)def post(self, request):"""新增"""dt = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")print(dt)# 获取前端传入的请示体数据(json) request.bodyjson_str_bytes = request.body# 把bytes类型的json字符串转换成json_strjson_str = json_str_bytes.decode()# 利用json.loads将json字符串转换成json字典/列表stu_dict = json.loads(json_str)# 创建模型对象并保存stu = DbStudent(name=stu_dict['name'],age=stu_dict['age'],sex=stu_dict['sex'],class_name=stu_dict['class_name'],description=stu_dict['description'],create_time=datetime.datetime.now(),updated_time=stu_dict['updated_time'])stu.save()# 把修改后的模型再转换成字典json_stu = {'id': stu.id,'name': stu.name,'age': stu.age,'sex': stu.sex,'class_name': stu.class_name,'description': stu.description if stu.description else '','create_time': stu.create_time,'updated_time': stu.updated_time}# 响应return JsonResponse(json_stu,safe=False)class BookDetailView(View):"""详情视图"""def get(self, request, pk):"""查询指定"""# 1、获取id# print(pk)try:# Django 方法list_student = DbStudent.objects.filter(id=pk)# 执行原生SQL# list_student = DbStudent.objects.raw(# "SELECT * FROM db_student WHERE id = '{_pk}'".format(_pk=pk)# )except DbStudent.DoesNotExist:return HttpResponse({"message": "经查询无记录"}, status=404)# print(list_student)# 2、模型对象转字典list_stu = []for stu in list_student:dict_student = {'id': stu.id,'name': stu.name,'age': stu.age,'sex': stu.sex,'class_name': stu.class_name,'description': stu.description if stu.description else '','create_time': stu.create_time,'updated_time': stu.updated_time}list_stu.append(dict_student)api_result["code"] = 200api_result["msg"] = "success"api_result["count"] = len(list_stu)api_result["data"] = list_stu# 3、响应return JsonResponse(api_result, json_dumps_params={'ensure_ascii': False},content_type="application/json; charset=utf-8",status=200, safe=False)@csrf_exemptdef put(self, request, pk):"""修改指定"""# 先查询要修改的模型对象try:stu = DbStudent.objects.get(id=pk)except DbStudent.DoesNotExist:return HttpResponse({"message": "要修改的数据不存在"}, status=404)# 获取前端传入的数据(把数据转换成字典)json_str_bytes = request.bodyjson_str = json_str_bytes.decode()stu_dict = json.loads(json_str)# stu_dict = json.loads(request.body.decode())# 重新给模型指定的属性赋值stu.name = stu_dict["name"]stu.age = stu_dict["age"]stu.sex = stu_dict["sex"]stu.class_name = stu_dict["class_name"]stu.description = stu_dict["description"]stu.create_time = stu_dict["create_time"]stu.updated_time = stu_dict["updated_time"]# 用save方法保存修改操作stu.save()# 把修改后的模型再转换成字典json_stu = {'id': stu.id,'name': stu.name,'age': stu.age,'sex': stu.sex,'class_name': stu.class_name,'description': stu.description if stu.description else '','create_time': stu.create_time,'updated_time': stu.updated_time}# 响应return JsonResponse(json_stu)# passdef delete_physics(self, request, pk):"""物理删除指定 """try:# Django 方法list_student = DbStudent.objects.get(id=pk)# 执行原生SQL# list_student = DbStudent.objects.raw(# "SELECT * FROM db_student WHERE id = '{_pk}'".format(_pk=pk)# )except DbStudent.DoesNotExist:return HttpResponse({"message": "经查询无记录"}, status=404)# 物理删除list_student.delete()# # 逻辑删除# list_student.is_deleted = 1# list_student.save()return HttpResponse(status=204)def delete(self, request, pk):"""逻辑删除指定 _logic"""try:# Django 方法list_student = DbStudent.objects.get(id=pk)# 执行原生SQL# list_student = DbStudent.objects.raw(# "SELECT * FROM db_student WHERE id = '{_pk}'".format(_pk=pk)# )except DbStudent.DoesNotExist:return HttpResponse({"message": "经查询无记录"}, status=404)# 物理删除# list_student.delete()# 逻辑删除list_student.is_deleted = 1list_student.save()return HttpResponse(status=204)
