管理员增删改查及session验证
from django.http import JsonResponse from django.db.models import F from django.db import IntegrityError, transaction import traceback # 导入 Order 对象定义 from common.models import Order,OrderMedicine import json def dispatcher(request): # 根据session判断用户是否是登录的管理员用户 if 'usertype' not in request.session: return JsonResponse({ 'ret': 302, 'msg': '未登录', 'redirect': '/mgr/sign.html'}, status=302) if request.session['usertype'] != 'mgr': return JsonResponse({ 'ret': 302, 'msg': '用户非mgr类型', 'redirect': '/mgr/sign.html'}, status=302) # 将请求参数统一放入request 的 params 属性中,方便后续处理 # GET请求 参数 在 request 对象的 GET属性中 if request.method == 'GET': request.params = request.GET # POST/PUT/DELETE 请求 参数 从 request 对象的 body 属性中获取 elif request.method in ['POST','PUT','DELETE']: # 根据接口,POST/PUT/DELETE 请求的消息体都是 json格式 request.params = json.loads(request.body) # 根据不同的action分派给不同的函数进行处理 action = request.params['action'] if action == 'list_order': return listorder(request) elif action == 'add_order': return addorder(request) # 订单 暂 不支持修改 和删除 else: return JsonResponse({'ret': 1, 'msg': '不支持该类型http请求'}) def listorder(request): # 返回一个 QuerySet 对象 ,包含所有的表记录 # 每条表记录都是是一个dict对象, # key 是字段名,value 是 字段值 # qs = Order.objects.values('id', # 'name', # 'create_date', # 'customer__name', # 'medicines__name' # ) qs = Order.objects.annotate( customer_name = F('customer__name'), medicines_name= F('medicines__name') ).values('id', 'name', 'create_date', 'customer_name', 'medicines_name' ) retlist = list(qs) newlist = [] id2order = {} for one in retlist: orderid = one['id'] if orderid not in id2order: newlist.append(one) id2order[orderid] = one else: id2order[orderid]['medicines_name'] += ' | ' + one['medicines_name'] print(newlist) return JsonResponse({'ret': 0, 'retlist': newlist[0]}) # def addorder(request): # info = request.params['data'] # # with transaction.atomic(): # new_order=Order.objects.create(name=info['name'], # customer_id=info['customerid']) # # batch = [OrderMedicine(order_id=new_order.id,medicine_id=mid,amount=1) # for mid in info['medicineids']] # #批量导入,参数是一个包含所有 该表的 Model 对象的 列表 # OrderMedicine.objects.bulk_create(batch) # # return JsonResponse({'ret': 0, 'id': new_order.id}) def addorder(request): info = request.params['data'] with transaction.atomic(): medicinelist = info['medicinelist'] new_order = Order.objects.create(name=info['name'], customer_id=info['customerid'], # 写入json格式的药品数据到 medicinelist 字段中 medicinelist=json.dumps(medicinelist,ensure_ascii=False),) batch = [OrderMedicine(order_id=new_order.id, medicine_id=medicine['id'], amount=medicine['amount']) for medicine in medicinelist] OrderMedicine.objects.bulk_create(batch) return JsonResponse({'ret': 0, 'id': new_order.id}) def deleteorder(request): # 获取订单ID oid = request.params['id'] try: one = Order.objects.get(id=oid) with transaction.atomic(): # 一定要先删除 OrderMedicine 里面的记录 OrderMedicine.objects.filter(order_id=oid).delete() # 再删除订单记录 one.delete() return JsonResponse({'ret': 0, 'id': oid}) #except Order.DoesNotExist: except Order.DoesNotExist: return JsonResponse({ 'ret': 1, 'msg': f'id 为`{oid}`的订单不存在' }) except: err = traceback.format_exc() return JsonResponse({'ret': 1, 'msg': err})
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!