前端对所有文件请求添加header_接口测试平台代码实现87: 全局请求头2

该博客介绍了如何在前端实现对所有文件请求添加自定义header。首先在后端views.py中添加请求头数据,然后在P_apis.html中通过for循环展示请求头。接着,创建新增、保存功能,利用js动态新增input框,并遍历所有input,将非空name的input数据传递给后端。在后端接收并处理这些数据,完成请求头的保存。最后,展示了功能实现后的效果,包括修改、删除和新增请求头。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    书接上回,我们已经在数据库中手动创建了俩个公共请求头。所以本节的主要任务是要让这俩个请求头显示在前端上。

    首先我们找到进入接口库的后端views.py中的控制数据的函数:child_json。给它添加上请求头的数据。

ee85283d3ca749f513aff980ac7afd19.png

     然后打开P_apis.html,找到我们相应的请求头设置代码:

43ba9cb7aa437db0f9f1716ac0b036a3.png

    我们接下来要在里面先写个for循环来显示出这俩个请求头:

8d80538e071444d00334183b3e0a3914.png

 <div id="header_plan">      {% for i in project_header %}          <input type="text" value="{{ i.name }}" style="width: 20%;margin-top: 3px" placeholder="请求头name"> = {"          <input type="text" value="{{ i.key }}" style="width: 15%" placeholder="请求头key"> " : "          <input type="text" value="{{ i.value }}" style="width: 50%" placeholder="请求头value"> "}          <br>      {% endfor %}  div>

看看效果:

eaea7996524d30a350c49d0c3206df89.png

显示功能我们已经搞定了。然后是 新增。我们就创建一个新增按钮。

4a539e8e331c327afb4272b59eebc0ef.png

它的onclick直接写好。然后我们去创建这个新增js函数:

ba1762b4a15b957d7e63c4f8e05952d9.png

function add_project_header() {    var header_plan = document.getElementById('header_plan');    var i1 = document.createElement('input');    i1.style='width: 20%;margin-top: 3px';    i1.placeholder='请求头name';    var i2 = document.createElement('input');    i2.style='width: 15%';    i2.placeholder='请求头key';    var i3 = document.createElement('input');    i3.style='width: 50%';    i3.placeholder='请求头value';    header_plan.appendChild(i1);    header_plan.appendChild(document.createTextNode(' = {" '));    header_plan.appendChild(i2);    header_plan.appendChild(document.createTextNode(' " : " '));    header_plan.appendChild(i3);    header_plan.appendChild(document.createTextNode(' "}'));    header_plan.appendChild(document.createElement("br"));}

所用知识全是已经学过的。看看效果:

a54f398e78ca8eade40ec2b93eb50ec2.png

注意这里的新增功能,只是用js在前端 增加了空input框,并没有真实的去修改数据库,一刷新就没了。

接下来我们做保存功能:

保存功能我们就遍历所有这个输入框,然后成为数组传递给后端。如果name是空的,那么直接抛弃掉后面的key-value,当做删除功能了。

    但是我们要靠什么东西一下获取到所有的input框呢?很显然,是name,name属性可以重复,我们可以用getElementsByname方法直接获取到所有。

但是目前我们的这些input并没有name,所以我们要先加上name属性。

ff52d3e049dc8b541b580a8e842e7a54.png

2cc3160a1160d64269031a9ce3b64ffe.png

之后我们在js方法中会有一个按照name数量进行的大循环,每次循环一行3个input,判断如果第一个input也就是name不为空,那么就添加到我们最终要发送给后端的数据中。

f67e47e15b5e94fda2412fd4121aa17b.png

我们获取了 所有的input,并且新建了准备发送用的空列表。然后进行大循环,其中判断如果name框非空,则给这三个空列表都添加上数据。最后打印一下这三个数组列表看看效果:

3aacce2c00ed86a8c88b76b138c8ffaf.png

736b953881b52031bf2fbf20e1e4e540.png

然后我们写一个请求传递给后端后就算ok;

a734feb086b50d532dfbeaad67408f8f.png

这里我们也要加上project.id,不然后台不知道是给哪个项目更新公共请求头

完整可复制版本:

function project_header_save() {    var names = document.getElementsByName('header_name');    var keys = document.getElementsByName('header_key');    var values = document.getElementsByName('header_value');    var req_names= [];    var req_keys=[];    var req_values=[];    for(var i=0;i        if(names[i].value != ''){            req_names.push(names[i].value);            req_keys.push(keys[i].value);            req_values.push(values[i].value);        }    }    $.get('/save_project_header/',{        "project_id":"{{ project.id }}",        "req_names":req_names.toString(),        "req_keys":req_keys.toString(),        "req_values":req_values.toString()    },function (ret) {        document.location.reload();    })}

然后我们去urls.py中写好对应:

83aebf11b85a6c3a60184ed7982d4d1a.png

然后去后台views.py中写好对应函数:

683308b123bb4a6a7ff317c672d917e6.png

这里我们因为传输的时候 把列表转变成了字符串。所以这里我们打印一下,看看这个字符串是什么样的,以便我们再变回列表:

重启服务,刷新页面,保存请求头:

7f33b6a24360acd40abf96a0eceec424.png

很显然,js自动用英文逗号拼接了这个数组列表,所以我们一会给反编译回来就行,很简单。

代码上我们用一个循环遍历即可:

97dd28a01c44657c91b1beab0b1aa5eb.png

重启服务,运行试试:

c31a8ae0657b40db3b5c06c4a3e346b3.png

上图中,修改了旧的俩个的key和value,然后新增的有个空白行和俩个正常的。然后我们点击保存。

然后再次打开:

ce77c04fb0e4db526daba0a3ab9d0d6a.png

看到这个效果,就代表实现成功了!

增加/删除/修改 功能于一身的设计看来比较不错。

好了本节就到这结束,下节课我们要让这些公共请求头实际可以添加到接口库和用例库中使用了。

感兴趣的可以加群,加博主微信:qingwanjianhua 拉你入群

加社团:https://testerhome.com/wqrf

关注博主博客:https://wangzijia.blog.youkuaiyun.com/

点亮该项目:https://github.com/Woqurefan/ApiTest/

体验在线地址:http://47.97.77.125:8000/home/

本公众号:测试开发干货

前端使用Swagger(通常是基于API文档的工具)进行测试和调试时,如果你想在跳转到 Swagger 的时候自动带上某些请求头,通常是在发送 API 请求的配置环节设置的。这里以常见的JavaScript框架Angular、React或Vue为例: **1. Angular (using HttpClient):** ```typescript import { HttpClientModule, HttpHeaders } from '@angular/common/http'; // 在模块导入HttpClientModule @NgModule({ imports: [HttpClientModule], }) export class AppModule {} // 在需要添加请求头的服务中 @Injectable() export class ApiService { constructor(private http: HttpClient) {} getApi(url: string, headers?: HttpHeaders) { const config = headers ? { headers: headers.clone() } : {}; return this.http.get(url, config); } } // 跳转时带header this.apiService.getApi('/api', new HttpHeaders({'Authorization': 'Bearer your-token'})) .subscribe(response => console.log(response)); ``` **2. React (using Axios or Fetch):** ```jsx import axios from 'axios'; // 在组件内创建axios实例并设置默认headers const instance = axios.create({ baseURL: '/api', headers: { Authorization: 'Bearer your-token', }, }); function fetchData() { instance.get('/your-endpoint') .then(response => console.log(response.data)); } // 调用fetchData函数时会带header fetchData(); ``` **3. Vue (using Vue-Resource or Axios):** ```javascript import axios from 'axios'; axios.defaults.headers.common['Authorization'] = 'Bearer your-token'; //全局设置 methods: { fetchData() { axios.get('/api/endpoint') .then(response => console.log(response.data)); } } ``` 当你点击Swagger中某个接口详情页时,可以在对应的请求模拟或预设请求头的地方填写并应用这些设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值