开发系统web接口

1.配置接口路径

开发web接口的访问方式与开发系统的访问方式相同,为了进行区分,这里设置web接口的根目录为“/api/”,通过二级目录表示实现具体功能的接口。

例如:

打开…/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>发布会接口

名称添加发布会接口
描述添加发布会
URLhttp://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>查询发布会接口

名称查询发布会接口
描述查询发布会接口
URLhttp://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等工具进行简单等接口测试,查看返回参数是否如预期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值