zoukankan      html  css  js  c++  java
  • django2_开发web系统接口

    1、单独创建.../sign/views_if.py文件,开发添加发布会接口

    from django.http import JsonResponse
    from cmdb.models import Event,Guest
    from django.core.exceptions import ValidationError,ObjectDoesNotExist
    from django.db.utils import IntegrityError
    import time
    
    #添加发布会接口
    def add_event(request):
        eid=request.Post.get('eid','')      #发布会id
        name=request.Post.get('name','')    #发布会标题
        limit=request.Post.get('limit','')   #限制人数
        status=request.Post.get('status','')  #状态
        address=request.Post.get('address','')   #地址
        start_time=request.Post.get('start_time','')   #发布会时间
    
        #判断 eid、 name、limit、address、start_time 等字段均不能为空,否则 JsonResponse()返回相应的 状态码和提示。
        if eid =='' or name=='' or limit=='' or address=='' or start_time=='':
            return JsonResponse({'status':10021,'message':'parameter error'})
        #,判断发布会 id 是否存在,以及发布会名称(name)是否存在;如果存在将返回相应的状态码和 提示信息。
        result=Event.objects.filter(id=eid)
        if result:
            return JsonResponse({'status':10022,'message':'event id already exists'})
        result = Event.objects.filter(name = name)
    
        #判断发布会状态是否为空,如果为空,将状态设置为 1(True)。
        if result:
            return JsonResponse({'status':10023, 'message':'event name already exists'})
        if status == '':
            status = 1
        #将数据插入到 Event 表,在插入的过程中如果日期格式错误,将抛出 ValidationError 异常,接收 该异常并返回相应的状态和提示,否则,插入成功,返回状态码 200 和“addeventsuccess”的提示
        try:
            Event.objects.create(id=eid,name=name,limit=limit,address=address, status=int(status),start_time=start_time)
        except ValidationError as e:
            error = 'start_time format error. It must be in YYYY-MM-DD HH:MM:SS format.'
            return JsonResponse({'status':10024,'message':error})
            return JsonResponse({'status':200,'message':'add event success'})
    
    
    
    #添加发布会查询接口
    '''from django.core.exceptions import ValidationError,ObjectDoesNotExist'''
    
    def get_event_list(request):
        #通过GET请求接收发布会id和name参数
        eid=request.GET.get("eid","")     #发布会id
        name=request.GET.get("name","")   #发布会名称
    
     #判断当两个参数同时为空,接 口返回状态码 10021,参数错误。
        if eid=='' and name =='':
            return JsonResponse({'status':10021,'message':'parameter error'})
        #,优先通过 id 查询,因为 id 的唯一性,查询结果只会有一条,将查询结果 以 key:value 对的方式存放到定义的 event 字典中,并将数据字典作为整个返回字典中 data 对应的值返回
        if eid !='':
            event={}
            try:
                result=Event.objects.get(id=eid)
            except ObjectDoesNotExist:
                return JsonResponse({'status':10022,'message':'queryresultisempty'})
            else:
                event['name']=result.name
                event['limit']=result.limit
                event['status']=result.status
                event['address'] = result.address
                event['start_time'] = result.start_time
                return JsonResponse({'status':200, 'message':'success', 'data':event})
    
          #name 查询为模糊查询,查询数据可能会有多条,返回的数据稍显复杂;首先将查询的每一条数据放到一 个字典 event 中,再把每一个字典再放到数组 datas 中,最后再将整个数组做为返回字典中 data 对应的值返回
        if name != '':
            datas = []
            results = Event.objects.filter(name__contains=name)
            if results:
                for r in results:
                    event = {}
                    event['name'] = r.name
                    event['limit'] = r.limit
                    event['status'] = r.status
                    event['address'] = r.address
                    event['start_time'] = r.start_time
                    datas.append(event)
                    return JsonResponse({'status':200, 'message':'success', 'data':datas})
            else:
                return JsonResponse({'status':10022,'message':'queryresultisempty'})
    
    #添加嘉宾接口
    '''
    from cmdb.models import Event,Guest
    from django.db.utils import IntegrityError
    import time
    '''
    def add_guest(request):
        #通过POST请求接收嘉宾参数:关联的发布会id、姓名、手机号和邮箱等参数
        eid = request.POST.get('eid','')  # 关联发布会id
        realname = request.POST.get('realname','') # 姓名
        phone = request.POST.get('phone','') # 手机号
        email = request.POST.get('email','')   #邮箱
    
     #判断 eid、realname、phone 等参数均不能为空
        if eid =='' or realname == '' or phone == '':
            return JsonResponse({'status':10021,'message':'parameter error'})
        #,判断嘉宾关联的发布会 id 是否存在,以及关联的发布会状态是否为 True(即 1),如果不存在 或不为 True,将返回相应的状态码和提示信息
        result = Event.objects.filter(id=eid)
        if not result:
            return JsonResponse({'status':10022,'message':'event id null'})
        result = Event.objects.get(id=eid).status
        if not result:
            return JsonResponse({'status':10023, 'message':'event status is not available'})
        event_limit = Event.objects.get(id=eid).limit  # 发布会限制人数
        guest_limit = Guest.objects.filter(event_id=eid) # 发布会已添加的嘉宾数
    
        #判断当前时间是否大于发布会时间,如果大于则说明发布已开始,或者早已经结束。那么该发布会就应该不能允许再添加嘉宾
        if len(guest_limit) >= event_limit:
            return JsonResponse({'status':10024,'message':'event number is full'})
        event_time = Event.objects.get(id=eid).start_time # 发布会时间
        etime = str(event_time).split(".")[0]
        timeArray = time.strptime(etime, "%Y-%m-%d %H:%M:%S")
        e_time = int(time.mktime(timeArray))
        now_time = str(time.time()) # 当前时间
        ntime = now_time.split(".")[0]
        n_time = int(ntime)
        #插入嘉宾数据,如果发布会的手机号重复则抛 IntegrityError 异常,接收该异常并返回相应的状态 码和提示信息。如果添加成功,则返回状态码 200 和“addguestsuccess”的提示
        if n_time >= e_time:
            return JsonResponse({'status':10025,'message':'event has started'})
        try: Guest.objects.create(realname=realname,phone=int(phone),email=email, sign=0,event_id=int(eid))
        except IntegrityError:
            return JsonResponse({'status':10026, 'message':'the event guest phone number repeat'})
        return JsonResponse({'status':200,'message':'add guest success'})
    
    #嘉宾查询接口
    def get_guest_list(request):
        eid = request.GET.get("eid", "") # 关联发布会id
        phone = request.GET.get("phone", "") # 嘉宾手机号
        if eid == '':
            return JsonResponse({'status':10021,'message':'eid cannot be empty'})
        if eid != '' and phone == '':
            datas = []
            results = Guest.objects.filter(event_id=eid)
            if results:
                for r in results:
                    guest = {}
                    guest['realname'] = r.realname
                    guest['phone'] = r.phone
                    guest['email'] = r.email
                    guest['sign'] = r.sign
                    datas.append(guest)
                return JsonResponse({'status':200, 'message':'success', 'data':datas})
            else:
                return JsonResponse({'status':10022,'message':'queryresultisempty'})
        if eid != '' and phone != '':
            guest = {}
            try:
                result = Guest.objects.get(phone=phone,event_id=eid)
            except ObjectDoesNotExist:
                return JsonResponse({'status':10022,'message':'queryresultisempty'})
            else:
                guest['realname'] = result.realname
                guest['phone'] = result.phone
                guest['email'] = result.email
                guest['sign'] = result.sign
                return JsonResponse({'status':200, 'message':'success', 'data':guest})
    
    #嘉宾签到接口
    def user_sign(request):
        eid = request.POST.get('eid','') # 发布会id
        phone = request.POST.get('phone','') # 嘉宾手机号
        #判断两个参数均不能为空
        if eid =='' or phone == '':
            return JsonResponse({'status':10021,'message':'parameter error'})
    
        #判断发布会 id 是否存在,以及发布会状态是否为 True,如果不存在或不为 True,将返回相应的状 态码和提示信息。
        result = Event.objects.filter(id=eid)
        if not result:
            return JsonResponse({'status':10022,'message':'event id null'})
        result = Event.objects.get(id = eid).status
        #判断当前时间是否大于发布会时间,如果大于发布会时间说明发布会已开始,不允许签
        if not result:
            return JsonResponse({'status':10023, 'message':'event status is not available'})
        event_time = Event.objects.get(id=eid).start_time # 发布会时间
        etime = str(event_time).split(".")[0]
        timeArray = time.strptime(etime, "%Y-%m-%d %H:%M:%S")
        e_time = int(time.mktime(timeArray))
        now_time = str(time.time()) # 当前时间
        ntime = now_time.split(".")[0]
        n_time = int(ntime)
        if n_time >= e_time:
            return JsonResponse({'status':10024,'message':'event has started'})
        #判断嘉宾的手机号是否存在,以及嘉宾的手机号与发布会 id 是否为对应关系。否则返回相应的 错误码和提示信息。
        result = Guest.objects.filter(phone = phone)
        if not result:
            return JsonResponse({'status':10025,'message':'user phone null'})
        result = Guest.objects.filter(event_id=eid,phone=phone)
        if not result:
            return JsonResponse({'status':10026, 'message':'user did not participatein the conference'})
        result = Guest.objects.get(event_id=eid,phone = phone).sign
        if result:
            return JsonResponse({'status':10027,'message':'user has sign in'})
        else:
            Guest.objects.filter(event_id=eid,phone=phone).update(sign='1')
            return JsonResponse({'status':200,'message':'sign success'})
       #判断该嘉宾的状态是否为已签到,如果已签到,返回相应的状态码和提示;如果未签到修改状态 为已签到,并返回状态码 200 和“signsuccess”的提示。

     2、接口文档

    学习来源于虫师

  • 相关阅读:
    Eluments ui 二级下拉菜单 回显问题
    数据结构与算法李春葆系列之二叉树设计性实验
    数据结构与算法李春葆之判断二叉树子树
    数据结构与算法李春葆系列 判断二叉树相同算法
    数据结构与算法李春葆系列之数组和广义表思维导图
    数据结构与算法李春葆系列之递归思维导图
    C语言之scanf函数
    c标准库(STL)系列-sscanf()
    一个可以把windows系统跑死的Java程序
    解决ubuntu19.0‘E: 无法获得锁 /var/lib/dpkg/lock-frontend
  • 原文地址:https://www.cnblogs.com/huaerye/p/10069907.html
Copyright © 2011-2022 走看看