接口平台小记录

数据绑定

项目管理功能知识点

  1. 挂载组件 components内
  2. 列表绑定数据(单向) 关键字 【:data】 【prop】
  3. 双向绑定 关键字【v-model=变量名】or 【:model=变量名】
  4. 进入页面加载函数放在 【mounted】内
  5. 需要触发函数 标签内 @click=函数名字 函数放在【method】 内
  6. 检测变化事件 @change=函数名字 函数放在【method】 内
  7. 链接跳转关键字 【router-link :to=’地址’】
  8. 插槽数据传递 【slot-scope】 获取行数据信息
  9. 请求后端通讯 axios.请求方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81

<el-input
placeholder="请输入项目名称,描述的关键字,回车搜索"
prefix-icon="el-icon-search"
style="width: 333px;margin-top: 15px"
v-model="search_keys" // 双向绑定 关键字【v-model=变量名】or 【:model=变量名】
@change="change_search" // 检测变化事件 @change=函数名字 函数放在【method】 内
>
</el-input>

<el-table
data="project_list_data" // 列表绑定数据(单向) 关键字 【:data】 【prop】
stripe
style="width: 100%;overflow-y: auto">
<el-table-column
prop="id"
label="ID"
width="100">
</el-table-column>
<el-table-column>
<template slot="header" >
<el-button style="width: 121px;background-color: #a3f188" @click="add_project()">新增项目</el-button>
</template>
// 插槽数据传递 【slot-scope】 获取行数据信息
<template slot-scope="scope">

<router-link :to="'/project_detail?project_id='+scope.row.id">
// 链接跳转关键字 【router-link】
<el-button
size="mini"
type="primary"
>进入</el-button>
</router-link>
&nbsp;
<el-button
size="mini"
type="danger"
// 需要触发函数 标签内 @click=函数名字 函数放在【method】 内
@click="delete_project(scope.row.id)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<script>
import Menu from '../components/Menu.vue'
import axios from "axios";
export default {
name: "Project_list",
data(){
return {

search_keys:'', // 接受用户输入,利用v-model双向绑定数据
project_list_data:[] // 初始化为空,利用mounted 进入页面加载列表
}
},
methods:{
change_search(){
axios('http://localhost:8000/get_project_list/',{
params:{
keys:this.search_keys // 获取用户输入的关键字,后端获取搜索
}
}).then(res=>{
this.project_list_data = res.data // 搜索完重新赋值列表
})
},

},
},
// 进入页面加载函数放在 【mounted】内
mounted() {
// 请求后端通讯 axios.请求方式
axios('http://localhost:8000/get_project_list/').then(res=>{
this.project_list_data = res.data
})
},
// 挂载组件
components:{
Menu
}
}
</script>

父传子组件

  1. 获取url中的参数比如项目id,使用$route.query.key(如project_id)
  2. 将此id传入子组件内使用 :project_id = $route.query.key
  3. 子组件使用props: [‘project_id’],之后就可以在子组件内使用this.值使用
1
2
3
4
5
6
7
8
9
10
<span style="float: right">项目id:{{$route.query.project_id}}</span>
<el-tabs v-model="tab_name">
<el-tab-pane label="项目设置" name="first">
<!-- 父组件传入子组件项目id-->
<Project_set :project_id = "$route.query.project_id"></Project_set>
</el-tab-pane>
<el-tab-pane label="接口用例" name="second">
<Project_case></Project_case>
</el-tab-pane>
</el-tabs>

小问题

设计编辑权限时,以列表的形式存放,前端多选框选择

  1. 出现问题,前端多选框选择不了一个,要选都选,不选都不选

  2. 排查过程

    1. 查看前端传值,Ture或False以为是前端问题

    2. 打印后端权限数组字段为 “[1,2,3,4]”,原来是字符串,所以才导致返显错误

    3. 利用python eval()函数将字段解析为列表,前端展示正常,且能正常多选

环境管理功能知识点

  1. dialog展示 设置变量控制 关键字 【:visible.sync=】
  2. 默认dialog不展示,新增或编辑 变量值为true,取消或保存后 变量名为false
  3. 编辑行信息时,获取所在行的id索引 关键字【scope.$index】
  4. 删除当前行信息是,使用【scope.row.id】
  5. 回显信息依然使用 【v-model】 绑定指定节点数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104

</el-table>
<template slot="header">
<el-button type="primary" @click="detail_new">新增环境</el-button>
</template>
<template slot-scope="scope">
<el-button size="mini" type="success" @click="detail_old(scope.$index)">编辑</el-button>
<el-button size="mini" type="danger" @click="del_env(scope.row.id)">删除</el-button>
</template>
</el-table>
<el-dialog title="创建/编辑环境" :visible.sync="dialogFormVisible">
<el-form :model="form">
<el-form-item label="HOST" label-width="80px">
<el-input v-model="form_data.host"></el-input>
</el-form-item>
<el-form-item label="描述" label-width="80px">
<el-input v-model="form_data.des"></el-input>
</el-form-item>
<el-form-item label="标签" label-width="80px">
<el-input v-model="form_data.type"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cancel_btn">取 消</el-button>
<el-button type="primary" @click="add_env">保 存</el-button>
</div>
</el-dialog>

<script>
import Menu from "../components/Menu";
import axios from "axios";
export default {
name: "Env_manage",
data(){
return{
dialogFormVisible: false,
env_list_data: [],
// 新增时的默认数据
form_data: {
host: "http://",
type: '',
des: ''
}
}
},
methods:{
// 新增环境 新增 变量值为true
// 后端 接口判断 如果有id 表名更新(编辑), 没有id即为新增
add_env(){
this.dialogFormVisible = false;
axios.post('http://localhost:8000/add_env/', this.form_data).then(res=>{
this.env_list_data = res.data
this.$message({
message:"创建成功",
type:"success"
})
})
},
// 新增或编辑 变量值为true
// 编辑回显
detail_old(index){
this.dialogFormVisible = true;
this.form_data = this.env_list_data[index]

},
// 取消或保存后 变量名为false
// 点击取消,重新加载
cancel_btn(){
this.dialogFormVisible = false
location.reload()
},
// 新增时表格内容
detail_new(){
this.dialogFormVisible = true
this.form_data = {
host:"http://",
type:'',
des:''
}
},
// 删除当前行信息是,使用【scope.row.id】
// 后端获取id,根据id查找环境进行删除,删除完成之后重新调用环境列表接口给到前端赋值
delete_project(env_id){
axios.get('http://localhost:8000/delete_env',{
params:{
env_id: env_id,
}
}).then(res=>{
this.env_list_data = res.data;
})
}

},
mounted() {
// 获取环境列表
axios.get('http://localhost:8000/get_env_list/').then(res=>{
this.env_list_data = res.data
})
},
components:{
Menu
}
}
</script>

接口管理功能知识点

———占位符———-

个人资料

  1. 上传功能 action属性 上传接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66


<el-form-item label="上传头像">
<el-upload
class="avatar-uploader"
action="http://localhost:8000/upload_user_avatar/"
:show-file-list="false"
:on-success="handleAvatarSuccess"
name="user_avatar"
>
<img v-if="imageUrl" :src="imageUrl" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>

<script>
import Menu from "../components/Menu";
import axios from "axios";
export default {
name: "Person_info",
components:{
Menu
},
data(){
return {
imageUrl: '',
person_info: {
username: '',
password: '',
job: '',
user_id: '',

},
}
},
methods:{
// 创建文件对象(饿了么)
handleAvatarSuccess(res, file){
this.imageUrl = URL.createObjectURL(file.raw);
},
// 保存用户头像 以用户id+
save_person_info(){
axios.post('http://localhost:8000/save_person_info/', this.person_info).then(res=>{
this.$message({
message: '保存成功!',
type: 'success',
})
})
}
// 上传头像 后端逻辑
// /upload_user_avatar/上传头像接口 action动作
// 获取图片对象和用户id
// 文件名字以【图片定义名字_用户id】上传到指定文件夹【xxx/xxx/xxx/图片定义名字_用户id.jpg】
},

// 初始化加载用户头像
// 头像地址为后端上传指定的文件位置拼接
mounted() {
axios.get("http://localhost:8000/get_person_info/").then(res=>{
console.log(res.data);
this.person_info = res.data;
this.imageUrl = '/static/user_avatar/userImg_'+res.data.user_id+'.jpg'
})
}
}
</script>

发送消息

逻辑处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 前端GET方式发送, 后台获取 GET 内的数据
# 单独获取某个key的值,防空判断
keys = request.GET.get('keys', None)
id = request.GET['id']

# 前端POST方式发送, 后台获取 POST 内的数据
form = json.loads(request.body.decode('utf-8')) # 编码转换+字符串转字典

# ORM筛选(filter) xx__contails=xx
project_id = request.GET['project_id']
DB_project_manage.objects.filter(id=project_id).delete()

# ORM模糊过滤(xx__contails=xx)
project_list_data = list((DB_project_manage.objects.filter(name__contains=keys)|DB_project_manage.objects.filter(des__contains=keys)).values())[::-1]

# 获取的最终数据以json格式返回给前端
return HttpResponse(json.dumps(form), content_type='application/json')

# 上传图片处理 chunks():
myFile = request.FILES.get('user_avatar', None) # 获取图片
user_id = request.user.id
file_name = 'userImg_' + str(user_id) + '.jpg' # 拼接图片名字
fp = open('apiAuto/static/user_avatar/' + file_name, 'wb') # 打开指定文件夹+图片名字
for i in myFile.chunks(): # 循环写入
fp.write(i)
fp.close()
return HttpResponse('')

# 返回所有表数据中的某几个字段
user_list = list(User.objects.all().values('username', 'id', 'first_name'))







接口平台小记录
http://example.com/2023/07/24/接口平台小记录/
作者
冰红茶
发布于
2023年7月24日
许可协议