• 管理员增删改查及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})
  • 相关阅读:
    《Java技术》第一次作业
    第十一次作业
    第十次作业
    第九次作业。
    第八次作业
    第七次作业
    第六次作业
    第五次作业。
    《Java技术》第三次作业--面向对象——继承、抽象类、接口
    《Java技术》第二次作业--面向对象基础
  • 原文地址:https://www.cnblogs.com/litzhiai/p/14713983.html
Copyright © 2020-2023  润新知