接口测试平台-102: 修改项目公共请求头bug 和 项目公共登陆态弹框 回填数据+关闭

1. 修复bug:当选择完公共请求头后取消选择,然后再请求就会报错的问题:

在views.py中进行改正,在Api_send函数中加了一个if判断:if i !='' :  

 

2. 构建登陆态表

# 项目全局域名
class DB_login(models.Model):
    project_id = models.CharField(max_length=10, null=True)  # 项目id
    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_host = 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)  # 请求体
    sign = models.CharField(max_length=10, null=True)  # 是否验签
    set = models.CharField(max_length=300, null=True)  # 是否提取设置

    def __str__(self):
        return str(self.id) + " " + self.project_id + " " + self.api_url

同步并生效:

去admin.py中注册:

admin.site.register(DB_login)

 

3. 前端请求

$.get('/project_get_login/', {
    "project_id": "{{ project.id }}"
}, function (ret) {
    console.log(ret)
})

 

url.py:

url(r'^project_get_login/$', views.project_get_login),  # 获取项目登陆态接口

views.py:

# 保存项目公共域名
def project_get_login(request):
    project_id = request.GET['project_id']
    try:
        login = DB_login.objects.filter(project_id=project_id).values()[0]
    except:
        login = {}
    return HttpResponse(json.dumps(login), content_type='application/json')

重启服务,刷新页面,打开登陆态接口发现没报错,即可。

 

现在可以去后台,记住自己的项目id,在后台新建一个符合的项目登陆态接口记录:

再试试看:

如上图,打开登陆态设置页面的时候,就可以看到consoloe.log中输出的内容。

 

继续写这个打开页面的js函数,给拿到的数据 都展示到设置页面上:

其中全部进行了加login_的设置,因为代码量大且极易出错,所以现在给大家可以复制的代码:

<script>
     function login_show() {
        //显示蒙层,并设置好蒙层的层级关系,让其在调试层之下,其他元素之上
        document.getElementById('mengceng').style.display='block';
        document.getElementById('mengceng').style.zIndex='998';
        document.getElementById('login_set_div').style.zIndex='999';
        document.getElementById('login_set_div').style.display = 'block';
        $.get("/project_get_login/", {
            "project_id": "{{ project.id }}"
        }, function (ret) {
            console.log(ret);
             // 运行第三方表格插件的函数:
            $('#login_mytable').SetEditable({
                $addButton: $('#login_add'),
            });
            $('#login_mytable2').SetEditable({
                $addButton: $('#login_add2'),
            });
            document.getElementById('login_method').value = ret.api_method;
            document.getElementById('login_url').value = ret.api_url;
            document.getElementById('login_host').value = ret.api_host;
            document.getElementById('login_header').value = ret.api_header;
            document.getElementById('login_response_set').value = ret.set;
            // 请求体编码格式
            var body_method = '#login_'+ret.body_method;

            $("li a[href="+body_method+"]").click();
            // 请求体显示
            if (ret.body_method === 'Text') {
                document.getElementById('login_raw_Text').value = ret.api_body;
            }
            if (ret.body_method === 'JavaScript') {
                document.getElementById('login_raw_JavaScript').value = ret.api_body;
            }
            if (ret.body_method === 'Json') {
                document.getElementById('login_raw_Json').value = ret.api_body;
            }
            if (ret.body_method === 'Html') {
                document.getElementById('login_raw_Html').value = ret.api_body;
            }
            if (ret.body_method === 'Xml') {
                document.getElementById('login_raw_Xml').value = ret.api_body;
            }
            if (ret.body_method === 'form-data') {
                var tbody = document.getElementById('login_mytbody'); // 定位表格中的tbody部分
                body = eval(ret.api_body); //把这个像列表的字符串请求体变成真正的列表
                for(var i=0;i<body.length;i++){ // 遍历这个请求体列表
                    key = body[i][0]; //拿出每一个键值对的key
                    value = body[i][1];//拿出每一个键值对的value
                    var childs_tr = tbody.children ;//获取到这个表格下面所有的tr组成的大列表
                    // 每个tr下的children得到的是 td列表,只有俩个。
                    childs_tr[i].children[0].innerText = key; //第一个td放key
                    childs_tr[i].children[1].innerText = value;//第二个td放value
                    //判断是否是最后一次遍历,来决定是否点击新增参数按钮
                    if (i<body.length-1) {
                        document.getElementById('login_add').click()
                    }
                }
            }
            if(ret.body_method === 'x-www-form-urlencoded'){
                var tbody = document.getElementById('login_mytbody2'); // 定位表格中的tbody部分
                body = eval(ret.api_body); //把这个像列表的字符串请求体变成真正的列表
                for(var i=0; i<body.length; i++){ // 遍历这个请求体列表
                    key = body[i][0]; //拿出每一个键值对的key
                    value = body[i][1];//拿出每一个键值对的value
                    var childs_tr = tbody.children ;//获取到这个表格下面所有的tr组成的大列表
                    // 每个tr下的children得到的是 td列表,只有俩个。
                    childs_tr[i].children[0].innerText = key; //第一个td放key
                    childs_tr[i].children[1].innerText = value;//第二个td放value
                    //判断是否是最后一次遍历,来决定是否点击新增参数按钮
                    if (i<body.length-1) {
                        document.getElementById('login_add2').click()
                    }
                }
            }
            if (ret.body_method === "GraphQL") {
                body_plan_G_Q = ret.api_body.split('*LR*')[0];
                body_plan_G_G = ret.api_body.split('*LR*')[1];
                document.getElementById('login_body_plan_G_Q').value =body_plan_G_Q;
                document.getElementById('login_body_plan_G_G').value = body_plan_G_G;
            }
        })
    }
</script>

 

刷新页面,再打开登陆态设置看看:

 

再加入取消按钮的js函数:

{#    关闭    #}
function login_close() {
    document.location.reload();
}

这回就可以用刷新页面的方法关闭这个设置层了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值