1.django单元测试
在tests.py文件中编写测试类,继承django的TestCase,该类继承自unittest
from django.test import TestCase, Client
# Create your tests here.
from django.test.utils import setup_test_environment
from sign.models import Guest, Event
# 不要单独执行该测试文件,python3 manage.py test 执行测试,test后可以添加模块或某个模块下的某个python文件或某个方法进行测试
#如 python3 manage.py test sign仅测试sign目录下的脚本,test sign.tests仅运行tests.py下脚本或-p test*.py
class ModelTest(TestCase):#继承django的unittest实现类TestCase
def setUp(self) -> None:
#创建event和Guest对象,并不会真正向数据库插入数据,所以测试完毕后不用清理数据,测试脚本可反复执行
event1 = Event.objects.create(id=4, name='宜家发布会', limit=6000, status=True, start_time
='2018-08-31 02:18:22', address='北京')
Guest.objects.create(realname='divid', event=event1, phone='15696963235', email='divid@qq.com', sign=False)
def test_event_models(self):
#测试查询出来的结果
event = Event.objects.get(name="宜家发布会")
self.assertEqual(event.address, "北京")
self.assertTrue(event.status)
def test_guest_models(self):
guest = Guest.objects.get(realname='divid')
self.assertEqual(guest.phone, "15696963235")
self.assertFalse(guest.sign)
def test_3(self):
response = self.client.get('/login/')#通过client发出请求
#test.client可以模拟浏览器发出请求
self.assertEqual(response.status_code, 200)
2.接口开发
1.在urls.py中填写url规则
2.编写接口函数,通过requests对象解析出参数,然后对参数进行判断进行不同类型json格式对象的返回
from django.core.exceptions import ValidationError
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from sign.models import Event
#接口开发
@csrf_exempt
def add_event(request):
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', '') # 发布会时间#获取请求参数
result = Event.objects.filter(name=name)#查询数据库
#根据结果与参数进行判断和返回,返回Json类型数据
if name == '' or limit == '' or address == '' or start_time == '':
return JsonResponse({'status': 10021, 'message': 'parameter error'})
if result:
return JsonResponse({'status': 10023, 'message': 'event name already exists'})
if status == '':
status = 1
try:
Event.objects.create(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))
n_time = int(time.time()) # 当前时间
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_dict = {
'eid': r.id,
'name': r.name,
'limit': r.limit,
'status': r.status,
'address': r.address,
'start_time': r.start_time,
}
datas.append(event_dict)
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_dict = {
"realname": r.realname,
"phone": r.phone,
"email": r.email,
"sign": r.sign,
}
datas.append(guest_dict)
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'})
try:
result = Event.objects.get(id=eid)
except Event.DoesNotExist:
return JsonResponse({'status': 10022, 'message': 'event id null'})
if result.status is False:
return JsonResponse({'status': 10023, 'message': 'event status is not available'})
event_time = result.start_time # 发布会时间
timeArray = time.strptime(str(event_time), "%Y-%m-%d %H:%M:%S")
e_time = int(time.mktime(timeArray))
n_time = int(time.time()) # 当前时间
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'})
else:
for res in result:
if res.event_id == int(eid):
break
else:
return JsonResponse({'status': 10026, 'message': 'user did not participate in the conference'})
result = Guest.objects.get(event_id=eid, phone=phone)
print(result.sign)
if result.sign is True:
return JsonResponse({'status': 10027, 'message': 'user has sign in'})
else:
result.sign = True
result.save()
return JsonResponse({'status': 200, 'message': 'sign success'})
3.接口开发文档