增删改查(原生)
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 json
import datetime
from django.views import View
from .models import DbStudent
from django.http import HttpResponse, JsonResponse
from addis_utils.api_utils import api_result
from django.views.decorators.csrf import csrf_exempt
"""
GET 查询所有 http://127.0.0.1:8081/demo/student
POST 新增 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"] = 200
api_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.body
json_str_bytes = request.body
# 把bytes类型的json字符串转换成json_str
json_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"] = 200
api_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_exempt
def put(self, request, pk):
"""修改指定"""
# 先查询要修改的模型对象
try:
stu = DbStudent.objects.get(id=pk)
except DbStudent.DoesNotExist:
return HttpResponse({"message": "要修改的数据不存在"}, status=404)
# 获取前端传入的数据(把数据转换成字典)
json_str_bytes = request.body
json_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)
# pass
def 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 = 1
list_student.save()
return HttpResponse(status=204)