首先来设计这个接口表:
一个接口实体应该具有哪些字段呢?
1. id ,自动生成无需在意
2.project_id ,所属的项目id
3.name , 接口名字
4.api_method ,请求方式
5.api_url , 请求url
6.api_header ,请求头
7.api_login ,是否需要带登陆状态
8.api_host , 域名
9.des, 描述
10.body_method , 请求体编码格式
11.api_body, 请求体
12.result , 结果-返回体
13.sign , 是否需要启动自定义算法加密
14.file_key ,带文件的文件key
15.file_name , 带文件的文件名
16.public_header , 项目的全局变量-公共请求头
这里我们先把所有可能用到的字段都列举出来了。怎么样,发送一个请求是不是比我们看到的要复杂多了?
注意,各种长度要尽量符合实际情况,比如url,有些接口甚至达到上千字符
而header则可能更长。但是这里的设置最大长度只会限定住后台admin 中你手动输入的情况。实际中我们在后台代码通过orm则可以无限制存储。
好的,打开models.py:
写好如下表设置:
懒人代码:
class DB_apis(models.Model): project_id = models.CharField(max_length=10,null=True) #项目id name = models.CharField(max_length=100,null=True) #接口名字 api_method = models.CharField(max_length=10,null=True) #请求方式 api_url = models.CharField(max_length=1000,null=True) #url api_header = models.CharField(max_length=1000,null=True) #请求头 api_login = models.CharField(max_length=10,null=True) #是否带登陆态 api_host = models.CharField(max_length=100,null=True) #域名 des = models.CharField(max_length=100,null=True) #描述 body_method = models.CharField(max_length=20,null=True) #请求体编码格式 api_body = models.CharField(max_length=1000,null=True) #请求体 result = models.TextField(null=True) #返回体 因为长度巨大,所以用大文本方式存储 sign = models.CharField(max_length=10,null=True) #是否验签 file_key = models.CharField(max_length=50,null=True) #文件key file_name = models.CharField(max_length=50,null=True) #文件名 public_header = models.CharField(max_length=1000,null=True) #全局变量-请求头 def __str__(self): return self.name
然后同步数据库:
然后admin.py中注册:
然后我们去后台创建1条接口记录,以便我们之后前端列表的展示调试。
注意这里我们必须填入所有字段才能保存成功。仅展示用,所以大家无需填入真正规则的数据。
然后我们开始更新views.py中的child_json(),要增加几句代码,用来从数据库接口表中取数据传递给前端页面:
其中获取数据库的接口,要过滤,必须是项目id正确的 才会要。
给前端的这个res json串,中的apis 就可以让前端直接使用了,
打开P_apis.html,学着之前项目列表的前端代码,创建接口列表:
大家可直接复制代码:(建议能自己敲下来的自己敲,完全懂的才可以复制粘贴)
<br><br> <table class="table table-striped"> <thead> <tr> <th>id</th> <th style="width: 50%">接口名称</th> <th style="width: 30%">url</th> <th>操作</th> </tr> </thead> <tbody> {% for i in apis %} <tr> <td>{{ i.id }}</td><td>{{ i.name }}</td> <td>{{ i.api_url }}</td> <td> <button onclick="" class="btn btn-success">调试</button> <button onclick="" class="btn btn-danger">删除</button></td> </tr> {% endfor %} </tbody> </table>
看看效果: