【发布时间】:2018-10-10 16:54:14
【问题描述】:
我正在尝试从 API 解析一些数据,然后通过 Flask Web 应用程序剥离并仅显示所需的信息。这似乎是我学习的一个很好的用例,构建一个本质上充当 API 接口的 Flask Web 应用程序。
这是我开始使用的脚本:
# !/usr/bin/env python
from __future__ import print_function
from functools import wraps
from flask import Flask, Response, request, jsonify, render_template, Request, json
from flask_bootstrap import Bootstrap
import time
import acos_client as acos
app = Flask(__name__)
app.config['SECRET_KEY'] = 'topsecret!'
bootstrap = Bootstrap(app)
c = acos.Client('1.2.3.4', acos.AXAPI_21, 'admin', 'password')
def get_sl1():
result = {}
sl1 = c.slb.virtual_server.all()
result['x'] = sl1['virtual_server_list'][0]
result['y'] = sl1['virtual_server_list'][0]['vport_list'][0]
return (sl1, result)
@app.route('/', methods=['GET','POST'])
def index():
sl1, sl1_dict = get_sl1()
return render_template('srvlist.html', x=sl1_dict['x'], y=sl1_dict['y'], sl1=sl1)
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
主要是理解我取回并存储为“sl1”的数据:
{
"virtual_server_list": [
{
"status": 1,
"disable_vserver_on_condition": 0,
"name": "VS_01",
"vip_template": "default",
"pbslb_template": "",
"vrid": 0,
"redistribution_flagged": 0,
"extended_stats": 0,
"ha_group": {
"status": 1,
"ha_group_id": 1,
"dynamic_server_weight": 0
},
"arp_status": 1,
"address": "10.10.10.1",
"vport_list": [
{
"protocol": 2,
"sync_cookie": {
"sync_cookie": 0,
"sack": 0
},
"snat_against_vip": 0,
"received_hop": 0,
"vport_template": "default",
"tcp_template": "",
"send_reset": 0,
"port": 143,
"service_group": "SG.IMAP.SITE.COM_143",
"vport_acl_id": 0,
"extended_stats": 0,
"source_nat": "",
"aflex_list": [],
"status": 1,
"direct_server_return": 0,
"ip_in_ip": 0,
"source_ip_persistence_template": "",
"default_selection": 1,
"vport_name": "IMAP.SITE.COM_143",
"auto_source_nat_precedence": 0,
"ha_connection_mirror": 0,
"connection_limit": {
"status": 0
},
"auto_source_nat": 0,
"pbslb_template": "",
"stats_data": 1,
"acl_natpool_binding_list": []
},
{
"protocol": 13,
"sync_cookie": {
"sync_cookie": 0,
"sack": 0
},
"snat_against_vip": 0,
"received_hop": 0,
"vport_template": "default",
"send_reset": 0,
"port": 993,
"service_group": "SG_IMAP.SITE.COM_993",
"vport_acl_id": 0,
"extended_stats": 0,
"source_nat": "",
"server_ssl_template": "",
"aflex_list": [],
"status": 1,
"client_ssl_template": "imap.site.com_2018",
"source_ip_persistence_template": "",
"default_selection": 1,
"vport_name": "IMAP.SITE.COM_993",
"auto_source_nat_precedence": 0,
"tcp_proxy_template": "",
"connection_limit": {
"status": 0
},
"auto_source_nat": 0,
"pbslb_template": "",
"stats_data": 1,
"acl_natpool_binding_list": []
}
],
"stats_data": 1
},
{
"status": 1,
"disable_vserver_on_condition": 0,
"name": "VS_02",
"vip_template": "default",
"pbslb_template": "",
"vrid": 0,
"redistribution_flagged": 0,
"extended_stats": 0,
"ha_group": {
"status": 1,
"ha_group_id": 1,
"dynamic_server_weight": 0
},
"arp_status": 1,
"address": "10.10.10.2",
"vport_list": [
{
"protocol": 2,
"sync_cookie": {
"sync_cookie": 0,
"sack": 0
},
"snat_against_vip": 0,
"received_hop": 0,
"vport_template": "default",
"tcp_template": "",
"send_reset": 0,
"port": 25,
"service_group": "SG_LAB_25",
"vport_acl_id": 0,
"extended_stats": 0,
"source_nat": "",
"aflex_list": [],
"status": 1,
"direct_server_return": 0,
"ip_in_ip": 0,
"source_ip_persistence_template": "",
"default_selection": 1,
"vport_name": "LAB_25",
"auto_source_nat_precedence": 0,
"ha_connection_mirror": 0,
"connection_limit": {
"status": 0
},
"auto_source_nat": 0,
"pbslb_template": "",
"stats_data": 1,
"acl_natpool_binding_list": []
}
],
"stats_data": 1
}
]
}
我的 Flask 模板如下所示:
{% extends "bootstrap/base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}A10 Server List{% endblock %}
{% block navbar %}
<nav class="navbar navbar-inverse" role="navigation">
<div class="container">
<a class="navbar-brand" href="{{ url_for('index') }}">A10 Server List</a>
</div>
</nav>
{% endblock %}
{% block content %}
<div class="container">
<div class="row">
<div class="col">
{% for row in x %}
<tr>
<td><b>VIP Name: {{ row['name'] }}</td></b>
<td><b>VIP Address: {{ row['address'] }}</b></td>
</tr><br><BR>
{% endfor %}
{% for row in y %}
<tr>
<td>VPort Name: {{ row['vport_name'] }}</td>
<td>Service Group: {{ row['service_group'] }}</td>
<td>Port: {{ row['port'] }}</td>
</tr><BR>
{% endfor %}
</div>
</div>
</div>
{% endblock %}
我期望得到以下结果:
VIP Name: VS_01 VIP Address: 10.10.10.1
VPort Name: IMAP.SITE.COM_143 Service Group: SG.IMAP.SITE.COM_143 Port: 143
VPort Name: IMAP.SITE.COM_993 Service Group: SG_IMAP.SITE.COM_993 Port: 993
VIP Name: VS_02 VIP Address: 10.10.10.2
VPort Name: LAB_25 Service Group: SG_LAB_25 Port: 25
然而我得到的只是空白:
VIP Name: VIP Address:
VIP Name: VIP Address:
VPort Name: Service Group: Port:
VPort Name: Service Group: Port:
VPort Name: Service Group: Port:
显然,由于各种嵌套的字典列表,我无法正确访问数据。
我认为这应该是相当接近和可行的,只是没有正确解析数据。
任何帮助将不胜感激。
【问题讨论】: