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