from django.http import JsonResponse
from guest.Sign.models import Event, Guest
from django.core.exceptions import ValidationError, ObjectDoesNotExist
from django.db.utils import IntegrityError
import time
# 添加发布会接口
def add_event(request):
"""
通过post请求接收发布会参数
:param request:
:return:
"""
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()返回响应状态码和提示
# jsonResponse()非常有用,他可以将字典转换成JSON格式返回给客户端
if eid =='' or name == '' or limit == '' or address == '' or start_time == '':
return JsonResponse({'status':10021,'message':'parameter error'})
# 判断eid是否存在,如果存在则说明重复,返回状态码及提示
result = Event.objects.filter(id=eid)
if result:
return JsonResponse({'status':10022,'message':'event id already exists'})
# 判断name是否存在,如果存在则说明重复,返回状态码及提示
result = Event.objects.filter(name=name)
if result:
return JsonResponse({'status':10023,'message':'event name already exists'})
# 判断发布会状态是否为空,如果为空则置为1
if status == '':
status = 1
# 插入数据,在插入过程中如果日期格式错误,则抛出ValidationError
# 异常处理接受该异常并返回相应的状态和提示,否则插入成功,返回状态码200和成功提示
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'})
#发布会查询
def get_event_list(request):
eid = request.GET.get("eid", "") # 发布会id
name = request.GET.get("name", "") # 发布会名称
# 通过GET请求接收eid和name,两个参数都是可选项,但不能同时为空,否则返回10021和错误提示
if eid == '' and name == '':
return JsonResponse({'status':10021,'message':'parameter error'})
# 如果eid不为空,则使用eid查询,将查询结果以字典的形式存放到定义的event中,并将event作为接口返回字典中data对应的值
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})
# name为模糊查询,返回结果可能是多条,先将查询的每一条数据放到一个event字典中,再把每个event字典放到datas数组中,最后将整个datas数组作为接口返回字典中data对应的值
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 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_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'})
对应接口文档
项
值
名称
添加发布会
描述
添加发布会
URL
http://127.0.0.1:8000/api/add_event/
调用方法
POST
传入参数
eid #发布会id, name #发布会标题, limit #限制人数,status #状态(非必填),address #地址,start_time #发布会时间(格式:2019-10-3012:00:00)
返回值
{‘status’:200, ‘message’:‘add event success’}
状态码
10021:parameter error 10022:event id already exists 10023: event name already exists 10024:start_time format error.It must be in YYY-MM-DD HH:MM:SS format 200:add event success
10021:parameter error 10022:query result is empty 200:add event success
说明
项
值
名称
添加嘉宾接口
描述
添加嘉宾接口
URL
http://127.0.0.1:8000/api/add_guest/
调用方法
POSST
传入参数
eid #关联发布会id, realname #姓名, phone #手机号,email #邮箱
返回值
{‘status’:200, ‘message’:‘add guest success’}
状态吗
10021:parameter error 10022:event id null 10023: event status is not available 10024:event number is full 10025: event has started 10026:the event guest phone number repeat 200:add event success
10021:eid cannot be empty 10022:query result is empty 200:success
说明
项
值
名称
发布会签到接口
描述
发布会签到接口
URL
http://127.0.0.1:8000/api/user_sign/
调用方法
GET
传入参数
eid #发布会id, phone #嘉宾手机号
返回值
{‘status’:200, ‘message’:‘sign success’}
状态码
10021:parameter error 10022:event id null 10023: event status is not available 10024:event has started 10025:user phone null 10026:user did not participate in the conference 10027:user has sign in 200:add event success