后台代码处理,就是点击Send按钮,调用requests来发送请求,并把返回值显示到调试层的返回体中即可。打开P_apis.html
1. 给调试层的Send按钮,添加onclick功能
2. 设计js函数ts_send()
现在来设计一下这个函数:
- 首先要获取这个接口当前所有的数据,用户正在选择的编码格式和请求体。
- 然后发出请求给后台传递这个接口的所有数据。
- 接受到后台返回值后,直接切换到返回体子页面,并把返回值显示到返回体的多行文本框中。
(获取各种接口数据的代码和保存接口的函数中基本相同,所以基本可以直接复制)
要注意修改请求url为/Api_send/,返回值处理方式也做了变更
添加映射:
urls.py
url(r'^api_send/$', api_send), # 调试层发送请求
views.py,复制save函数到send函数
# 调试层发送请求
def api_send(request):
# 提取所有数据
api_id = request.GET['api_id']
api_name = request.GET['api_name']
ts_method = request.GET['ts_method']
ts_url = request.GET['ts_url']
ts_host = request.GET['ts_host']
ts_header = request.GET['ts_header']
ts_body_method = request.GET['ts_body_method']
ts_api_body = request.GET['ts_api_body']
# 发送请求获取返回值(先空着)
# 把返回值传递给前端页面(先写死)
return HttpResponse('{"code": 200}')
先没做发送请求的代码,而是先写死了个demo返回值。重启服务,刷新页面。点击一下send按钮看看:
3. 这里选择4,不用此办法;修复bug:发送请求的子标签是返回体,报错;应该禁止Send + 保存(粗略实现)
抽离body
修改返回体3个字为Response
看看效果
4. 在response中继续发送请求怎么办?
记住用户上一次选择的请求体编码格式和请求体。接口表加俩个字段,一个是上次的请求体方式,一次是上次的请求体。
last_body_method = models.CharField(max_length=20, null=True) # 上次请求体编码格式
last_api_body = models.CharField(max_length=1000, null=True) # 上次请求体
执行并生效:
python manage.py makemigrations
python manage.py migrate
执行成功后,切换回P_apis.html中,当用户选择激活的子页面是编码格式时,才会定义声明ts_api_body这个变量
那么当选择激活的是返回体子页面时候,自然这个变量不存在,所以报错了。
那么解决办法就是,当请求体编码格式这个函数,当它为#response时。后台要对其进行处理,选用上一次的请求体编码格式和请求体内容来进行再次请求。
所以我们去后台编写ts_send()函数:
# 当是返回体时,则执行上次的结果
ts_body_method = request.GET['ts_body_method']
if ts_body_method == 'Response':
api = DB_apis.objects.filter(id=api_id)[0]
ts_body_method = api.last_body_method
ts_api_body = api.last_api_body
# 当没有请求模式时,则报错
if ts_body_method in ['', None]:
return HttpResponse('请先选择好请求体编码格式和请求体,再点击Send按钮发送请求!')
else:
ts_api_body = request.GET['ts_api_body']
api = DB_apis.objects.filter(id=api_id)
api.update(last_body_method=ts_body_method, last_api_body=ts_api_body)
去掉之前的判断alert,3,看看效果
5. 保存
场景1:用户设置好请求体编码格式和内容后,直接点击保存按钮。这时什么问题都没有,保存成功。
场景2:用户设置好请求体编码格式和内容后,点击Send按钮测试了一下,发现返回体没问题,这时他就会直接点击保存按钮。
那么俩个字段数据从哪来呢?当然是上一次的俩个last字段了。因为请求时,已经保存了这次的请求体编码格式和内容了。
所以我们找到保存函数,按如下方式更改:
# 当是返回体时,则执行上次的结果
ts_body_method = request.GET['ts_body_method']
if ts_body_method == 'Response':
api = DB_apis.objects.filter(id=api_id)[0]
ts_body_method = api.last_body_method
ts_api_body = api.last_api_body
# 当没有请求模式时,则报错
if ts_body_method in ['', None]:
return HttpResponse('请先选择好请求体编码格式和请求体,再点击Send按钮发送请求!')
else:
ts_api_body = request.GET['ts_api_body']
测试一下。
新建了一个接口,然后在form-data中输入几行参数,然后点击Send按钮,等到返回体子页面激活后,直接点击保存按钮。弹层自动关闭。再打开看看是否保存成了。发现保存成功了,自动切换到了form-data上并且显示了刚刚输入的几行参数。