1、发布会添加接口
2、发布会查询接口
3、嘉宾添加接口
4、嘉宾查询接口
5、嘉宾签到接口
from django.http import JsonResponse from django.core.exceptions import ValidationError, ObjectDoesNotExist from django.db.utils import IntegrityError import time from loginApp.models import Event, Guest # 添加发布会接口 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','') # 发布会时间 if eid =='' or name == '' or limit == '' or address == '' or start_time == '': return JsonResponse({'status':10021,'message':'parameter error'}) result = Event.objects.filter(id=eid) if result: return JsonResponse({'status':10022,'message':'event id already exists'}) result = Event.objects.filter(name=name) if result: return JsonResponse({'status':10023,'message':'event name already exists'}) if status == '': status = 1 try: Event.objects.create(id=eid,name=name,limit=limit,address=address,status=int(status),start_time=start_time) except ValidationError: 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'}) # 添加嘉宾接口 def add_guest(request): eid = request.POST.get('eid','') # 关联发布会id realname = request.POST.get('realname','') # 姓名 phone = request.POST.get('phone','') # 手机号 email = request.POST.get('email','') # 邮箱 if eid =='' or realname == '' or phone == '': return JsonResponse({'status':10021,'message':'parameter error'}) 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 # 发布会时间 timeArray = time.strptime(str(event_time), "%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':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_event_list(request): eid = request.GET.get("eid", "") # 发布会id name = request.GET.get("name", "") # 发布会名称 if eid == '' and name == '': return JsonResponse({'status':10021,'message':'parameter error'}) if eid != '': event = {} try: result = Event.objects.get(id=eid) except ObjectDoesNotExist: return JsonResponse({'status':10022, 'message':'query result is empty'}) else: event['eid'] = result.id 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}) if name != '': datas = [] results = Event.objects.filter(name__contains=name) if results: for r in results: event = {} event['eid'] = r.id 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':'query result is empty'}) # 嘉宾查询接口 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':'query result is empty'}) if eid != '' and phone != '': guest = {} try: result = Guest.objects.get(phone=phone,event_id=eid) except ObjectDoesNotExist: return JsonResponse({'status':10022, 'message':'query result is empty'}) 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'}) 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 # 发布会时间 timeArray = time.strptime(str(event_time), "%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'}) result = Guest.objects.filter(phone=phone) if not result: return JsonResponse({'status':10025,'message':'user phone null'}) result = Guest.objects.filter(phone=phone,event_id=eid) if not result: return JsonResponse({'status':10026,'message':'user did not participate in 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(phone=phone).update(sign='1') return JsonResponse({'status':200,'message':'sign success'})
6、配置接口路径
修改urls.py
"""loginDemo URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/1.11/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ from django.conf.urls import url from django.contrib import admin from django.urls import include from loginApp import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login/', views.login), url(r'^login_action/', views.login_action), url(r'^event_manage/', views.event_manage), url(r'^accounts/login',views.login), url(r'^search_name/',views.search_name), url(r'^search_phone/',views.search_phone), url(r'^guest_manage/',views.guest_manage), url(r'^sign_index/(?P<event_id>[0-9]+)/$',views.sign_index), url(r'^sign_index_action/(?P<event_id>[0-9]+)/$', views.sign_index_action), url(r'^logout/',views.logout), url(r'^api/', include(('loginApp.urls','loginApp'), namespace="sign")), ]
新增loginApp/urls.py
from django.conf.urls import url from loginApp import views_interface urlpatterns = [ # guest system interface: # ex : /api/add_event/ url(r'^add_event/', views_interface.add_event, name='add_event'), # ex : /api/add_guest/ url(r'^add_guest/', views_interface.add_guest, name='add_guest'), # ex : /api/get_event_list/ url(r'^get_event_list/', views_interface.get_event_list, name='get_event_list'), # ex : /api/get_guest_list/ url(r'^get_guest_list/', views_interface.get_guest_list, name='get_guest_list'), # ex : /api/user_sign/ url(r'^user_sign/', views_interface.user_sign, name='user_sign'), ]
7、启动后访问:http://127.0.0.1:8000/,用postman或者raw等接口测试工具进行测试
(1)add_event
case1:eid为空
case2:name为空
case3:limit为空
case4:address为空
case5:start_time为空
case6:start_time不是YYYY-MM-DD格式/start_time是YYYY-MM-DD格式,但不是准确的时间2021-13-21 34:21:89
case7:eid发布会id已经存在
case8:name已经存在
case9:status为空,成功创建,status=1
case10:status传参0,成功创建,status=0