1.配置接口路径
开发web接口的访问方式与开发系统的访问方式相同,为了进行区分,这里设置web接口的根目录为“/api/”,通过二级目录表示实现具体功能的接口。
例如:
- http://127.0.0.1:8000/api/add_event 表示添加发布会接口
- http://127.0.0.1:8000/api/get_event_list 表示查询发布会接口
打开…/gust/urls.py文件,添加接口根路径“/api/”。
from django.conf.urls import url, include
...
urlpatterns = [
...
url(r'^api/', include('sign.urls', namespace="sign")),
]
在sign应用下创建urls.py文件,即…/sign/urls.py,用来配置具体接口的二级目录。
from django.conf.urls import url
from sign import views_if,views_if_sec
urlpatterns = [
# guest system interface:
# ex : /api/add_event/
url(r'^add_event/', views_if.add_event, name='add_event'),
# ex : /api/get_event_list/
url(r'^get_event_list/', views_if.get_event_list, name='get_event_list'),
]
为了避免web接口的代码与views.py文件中的系统代码混淆,需中sign应用下新建views_if.py文件,即…/sign/views_if.py文件,用于web接口的开发。
2.添加发布会接口
打开…/sign/views_if.py文件,开发添加发布会接口。
from django.http import JsonResponse
from sign.models import Event, Guest
from django.core.exceptions import ValidationError, ObjectDoesNotExist
from django.db.utils import IntegrityError
import time
# 添加发布会接口
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'})
通过post请求接收发布会参数:发布会ID(eid),名称(name),人数(limit),状态(status),地址(address)和时间(start_time)等参数。
3.查询发布会接口
在…/sign/views_if.py文件中开发查询发布会接口。
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'})
通过get请求接收发布会ID(id)和发布会名称(name)。两个参数都为可选项,但不能同时为空,否则接口会返回状态码10021和“parameter error”错误提示。
4.编写接口文档
1>发布会接口
名称 | 添加发布会接口 |
---|---|
描述 | 添加发布会 |
URL | http://127.0.0.1:8000/api/add_event/ |
调用方法 | POST |
传入参数 | eid #发布会id ; name #发布会标题;limit #发布会限制人数;status #状态(非必填);address #地址;start_time #发布会时间(格式:2018-09-09 12: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;200:eid event success |
说明 |
2>查询发布会接口
名称 | 查询发布会接口 |
---|---|
描述 | 查询发布会接口 |
URL | http://127.0.0.1:8000/api/get_event_list/ |
调用方法 | GET |
传入参数 | eid #发布会id ; name #发布会名称 |
返回值 | {”data“{“start_time”:“2018-09-09 12:00:00”,“name”:“发布会活动测试”,“limit”:2000,“address”:“测试地址”,“status”:true},‘message’:‘success’,“status”:200} |
状态码 | 10021:parameter error;10022:query result is empty;200:eid event success |
说明 | eid 或name两个参数二选一 |
接口开发完成以后,可以使用postman等工具进行简单等接口测试,查看返回参数是否如预期。