接口代码

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

说明

名称

查询发布会

描述

查询发布会

URL

​http://127.0.0.1:8000/api/get_event_list/​

调用方法

GET

传入参数

eid #发布会id, name #发布会标题

返回值

{“data”:{“start_time”: “2019-10-30T14:00:00”,“name”:“询盘云发布会A”, “limit”:“200”, “address”:“北京”, “status”:“true”},“message”:“success”, “status”:“200”}

状态码

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

说明

名称

查询嘉宾接口

描述

查询嘉宾接口

URL

​http://127.0.0.1:8000/api/get_guest_list/​

调用方法

GET

传入参数

eid #发布会id , phone #手机号

返回值

{“data”:[{“email”:“davieyang@qq.com”,“phone”:“18001156566”,“realname”:“davieyang”,“sign”:“false”},{“email”:“davieyang@qq.com”,“phone”:“18001156566”,“realname”:“davieyang”,“sign”:“false”},{“email”:“davieyang@qq.com”,“phone”:“18001156566”,“realname”:“davieyang”,“sign”:“false”}],“message”:“success”,“status”:“200”}

状态吗

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

说明

接口测试用例

from testcase import test_data
import unittest
import requests
import os, sys
parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parent_dir)


class AddEventTest(unittest.TestCase):
""" 添加发布会 """

def setUp(self):
self.base_url = "http://127.0.0.1:8000/api/add_event/"

def tearDown(self):
print(self.result)

def test_add_event_all_null(self):
""" 所有参数为空 """
payload = {'eid': '', '': '', 'limit': '', 'address': "", 'start_time': ''}
r = requests.post(self.base_url, data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10021)
self.assertEqual(self.result['message'], 'parameter error')

def test_add_event_eid_exist(self):
""" id已经存在 """
payload = {'eid': 1, 'name': '一加4发布会', 'limit': 2000, 'address': "深圳宝体", 'start_time': '2017'}
r = requests.post(self.base_url, data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10022)
self.assertEqual(self.result['message'], 'event id already exists')

def test_add_event_name_exist(self):
""" 名称已经存在 """
payload = {'eid': 11, 'name': '红米Pro发布会', 'limit': 2000, 'address': "深圳宝体", 'start_time': '2017'}
r = requests.post(self.base_url,data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10023)
self.assertEqual(self.result['message'], 'event name already exists')

def test_add_event_data_type_error(self):
""" 日期格式错误 """
payload = {'eid': 11, 'name': '一加4手机发布会', 'limit': 2000, 'address': "深圳宝体", 'start_time': '2017'}
r = requests.post(self.base_url, data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10024)
self.assertIn('start_time format error.', self.result['message'])

def test_add_event_success(self):
""" 添加成功 """
payload = {'eid': 11, 'name': '一加4手机发布会', 'limit': 2000, 'address': "深圳宝体",
'start_time': '2017-05-10 12:00:00'}
r = requests.post(self.base_url, data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 200)
self.assertEqual(self.result['message'], 'add event success')


if __name__ == '__main__':
test_data.init_data() # 初始化接口测试数据
unittest.main()
from testcase import test_data
import unittest
import requests
import os, sys
parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parent_dir)


class AddGuessTest(unittest.TestCase):
""" 添加嘉宾 """

def setUp(self):
self.base_url = "http://127.0.0.1:8000/api/add_guest/"

def tearDown(self):
print(self.result)

def test_add_guest_all_null(self):
""" 参数为空 """
payload = {'eid': '', 'realname': '', 'phone': ''}
r = requests.get(self.base_url, data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10021)
self.assertEqual(self.result['message'], 'parameter error')

def test_add_guest_eid_null(self):
""" eid=901 查询为空 """
payload = {'eid': 901, 'realname': 'tom', 'phone': 13711001100}
r = requests.post(self.base_url, data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10022)
self.assertEqual(self.result['message'], 'event id null')

def test_add_guest_status_close(self):
""" eid=2 状态未开启 """
payload = {'eid': 3, 'realname': 'tom', 'phone': 13711001100}
r = requests.post(self.base_url,data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10023)
self.assertEqual(self.result['message'], 'event status is not available')

def test_add_guest_limit_full(self):
""" eid=2 发布会人数已满 """
payload = {'eid': 2, 'realname': 'tom', 'phone': 13711001100}
r = requests.post(self.base_url,data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10024)
self.assertEqual(self.result['message'], 'event number is full')

def test_add_guest_time_start(self):
""" eid=4 发布会已开始 """
payload = {'eid':4,'realname':'tom','phone':13711001100}
r = requests.post(self.base_url,data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10025)
self.assertEqual(self.result['message'], 'event has started')

def test_add_guest_phone_repeat(self):
""" phone=13800113001 手机号重复 """
payload = {'eid': 1, 'realname': 'tom', 'phone': 13511001100}
r = requests.post(self.base_url, data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10026)
self.assertEqual(self.result['message'], 'the event guest phone number repeat')

def test_add_guest_success(self):
""" 添加成功 """
payload = {'eid': 1, 'realname': 'tom', 'phone': 13511001199}
r = requests.post(self.base_url, data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 200)
self.assertEqual(self.result['message'], 'add guest success')


if __name__ == '__main__':
test_data.init_data() # 初始化接口测试数据
unittest.main()
import unittest
import requests
import os, sys
parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parent_dir)
from testcase import test_data


class GetEventListTest(unittest.TestCase):
""" 获得发布会列表 """

def setUp(self):
self.base_url = "http://127.0.0.1:8000/api/get_event_list/"

def tearDown(self):
print(self.result)

def test_get_event_list_eid_error(self):
""" eid=901 查询结果为空 """
r = requests.get(self.base_url, params={'eid': 901})
self.result = r.json()
self.assertEqual(self.result['status'], 10022)
self.assertEqual(self.result['message'], 'query result is empty')

def test_get_event_list_eid_success(self):
""" 根据 eid 查询结果成功 """
r = requests.get(self.base_url, params={'eid': 1})
self.result = r.json()
self.assertEqual(self.result['status'], 200)
self.assertEqual(self.result['message'], 'success')
self.assertEqual(self.result['data']['name'],u'红米Pro发布会')
self.assertEqual(self.result['data']['address'],u'北京会展中心')

def test_get_event_list_nam_result_null(self):
""" 关键字‘abc’查询 """
r = requests.get(self.base_url, params={'name': 'abc'})
self.result = r.json()
self.assertEqual(self.result['status'], 10022)
self.assertEqual(self.result['message'], 'query result is empty')

def test_get_event_list_name_find(self):
""" 关键字‘发布会’模糊查询 """
r = requests.get(self.base_url, params={'name': '发布会'})
self.result = r.json()
self.assertEqual(self.result['status'], 200)
self.assertEqual(self.result['message'], 'success')
self.assertEqual(self.result['data'][0]['name'],u'红米Pro发布会')
self.assertEqual(self.result['data'][0]['address'],u'北京会展中心')


if __name__ == '__main__':
test_data.init_data() # 初始化接口测试数据
unittest.main()
import unittest
import requests
import os, sys
parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parent_dir)
from testcase import test_data


class GetGuestListTest(unittest.TestCase):
""" 获得嘉宾列表 """

def setUp(self):
self.base_url = "http://127.0.0.1:8000/api/get_guest_list/"

def tearDown(self):
print(self.result)

def test_get_guest_list_eid_null(self):
""" eid 参数为空 """
r = requests.get(self.base_url, params={'eid': ''})
self.result = r.json()
self.assertEqual(self.result['status'], 10021)
self.assertEqual(self.result['message'], 'eid cannot be empty')

def test_get_event_list_eid_error(self):
""" 根据 eid 查询结果为空 """
r = requests.get(self.base_url, params={'eid': 901})
self.result = r.json()
self.assertEqual(self.result['status'], 10022)
self.assertEqual(self.result['message'], 'query result is empty')

def test_get_event_list_eid_success(self):
""" 根据 eid 查询结果成功 """
r = requests.get(self.base_url, params={'eid': 1})
self.result = r.json()
self.assertEqual(self.result['status'], 200)
self.assertEqual(self.result['message'], 'success')
self.assertEqual(self.result['data'][0]['realname'],'alen')
self.assertEqual(self.result['data'][0]['phone'],'13511001100')

def test_get_event_list_eid_phone_null(self):
""" 根据 eid 和phone 查询结果为空 """
r = requests.get(self.base_url, params={'eid': 1, 'phone': '10000000000'})
self.result = r.json()
self.assertEqual(self.result['status'], 10022)
self.assertEqual(self.result['message'], 'query result is empty')

def test_get_event_list_eid_phone_success(self):
""" 根据 eid 和phone 查询结果成功 """
r = requests.get(self.base_url, params={'eid': 1, 'phone': '13511001100'})
self.result = r.json()
self.assertEqual(self.result['status'], 200)
self.assertEqual(self.result['message'], 'success')
self.assertEqual(self.result['data']['realname'],'alen')
self.assertEqual(self.result['data']['phone'],'13511001100')


if __name__ == '__main__':
test_data.init_data() # 初始化接口测试数据
unittest.main()
import os
import sys
import unittest
import requests
from testcase import test_data
parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parent_dir)


class UserSignTest(unittest.TestCase):
""" 用户签到 """
def setUp(self):
self.base_url = "http://127.0.0.1:8000/api/user_sign/"

def tearDown(self):
print(self.result)

def test_user_sign_all_null(self):
""" 参数为空 """
payload = {'eid': '', 'phone': ''}
r = requests.post(self.base_url, data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10021)
self.assertEqual(self.result['message'], 'parameter error')

def test_user_sign_eid_error(self):
""" eid=901 查询结果不存在 """
payload = {'eid': 901, 'phone': 13711001100}
r = requests.post(self.base_url, data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10022)
self.assertEqual(self.result['message'], 'event id null')

def test_user_sign_status_close(self):
""" eid=3 发布会状态关闭 """
payload = {'eid': 3, 'phone': 13711001100}
r = requests.post(self.base_url,data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10023)
self.assertEqual(self.result['message'], 'event status is not available')

def test_user_sign_time_start(self):
""" eid=4 发布会已开始 """
payload = {'eid': 4, 'phone': 13711001100}
r = requests.post(self.base_url, data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10024)
self.assertEqual(self.result['message'], 'event has started')

def test_user_sign_phone_error(self):
""" phone=10100001111 手机号不存在 """
payload = {'eid': 1, 'phone': 10100001111}
r = requests.post(self.base_url, data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10025)
self.assertEqual(self.result['message'], 'user phone null')

def test_user_sign_eid_phone_error(self):
"""eid=1, phone=13511001102 手机号与发布会不匹配 """
payload = {'eid': 1, 'phone': 13511001102}
r = requests.post(self.base_url, data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10026)
self.assertEqual(self.result['message'], 'user did not participate in the conference')

def test_user_sign_has_sign_in(self):
""" 已签到 """
payload = {'eid': 1, 'phone': 13511001101}
r = requests.post(self.base_url, data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 10027)
self.assertEqual(self.result['message'], 'user has sign in')

def test_user_sign_success(self):
""" 签到成功 """
payload = {'eid': 1, 'phone': 13511001100}
r = requests.post(self.base_url, data=payload)
self.result = r.json()
self.assertEqual(self.result['status'], 200)
self.assertEqual(self.result['message'], 'sign success')


if __name__ == '__main__':
test_data.init_data() # 初始化接口测试数据
unittest.main()