Python 使用Flask解析API中的JSON数据?
我试图解析API中的一些数据,然后通过Flask web应用程序剥离并仅显示所需的信息。对于我来说,这似乎是一个很好的学习案例,构建一个Flask web应用程序,它本质上充当API的接口 这是我开始使用的脚本:Python 使用Flask解析API中的JSON数据?,python,json,flask,Python,Json,Flask,我试图解析API中的一些数据,然后通过Flask web应用程序剥离并仅显示所需的信息。对于我来说,这似乎是一个很好的学习案例,构建一个Flask web应用程序,它本质上充当API的接口 这是我开始使用的脚本: # !/usr/bin/env python from __future__ import print_function from functools import wraps from flask import Flask, Response, request, jsonify, r
# !/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”的数据:
我的烧瓶模板如下所示:
{% 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: VIP Address:
VIP Name: VIP Address:
VPort Name: Service Group: Port:
VPort Name: Service Group: Port:
VPort Name: Service Group: Port:
显然,由于各种嵌套的dicts列表,我无法正确访问数据
我认为这应该是相当接近和可行的,只是没有正确地解析数据
任何帮助都将不胜感激。不确定该问题是否与
解析相关。您的问题可能与jinja+渲染相关
app.py
app = Flask(__name__)
app.config['SECRET_KEY'] = 'topsecret!'
# your data c.slb.virtual_server.all()
data_from_server = {"virtual_server_list": ...}
with app.app_context():
print(render_template(
'srvlist.html',
template_data=data_from_server['virtual_server_list']))
模板/srvlist.html
{% block content %}
{# template_data is a list #}
{# example data:
template_data = [
{
'name': 'n1',
'address': 'a1',
'vport_list': [
{
'vport_name': 'vp1',
'service_group': 'group1',
'port': 8000
}]
}]
#}
{% for row in template_data %}
{# row is a dict - {'name': 'val', 'address': 'val'} #}
VIP Name: {{ row['name'] }}
VIP Address: {{ row['address'] }}
{# row['vport_list'] is a list #}
{% for port in row['vport_list'] %}
{# port is a dict - {'vport_name': 'val', 'service_group': 'val', 'port': 8000} #}
VPort Name: {{ port['vport_name'] }}
Service Group: {{ port['service_group'] }}
Port: {{ port['port'] }}
{% endfor %}
{% endfor %}
{% endblock %}
请参阅模板中的注释。希望这有帮助
app = Flask(__name__)
app.config['SECRET_KEY'] = 'topsecret!'
# your data c.slb.virtual_server.all()
data_from_server = {"virtual_server_list": ...}
with app.app_context():
print(render_template(
'srvlist.html',
template_data=data_from_server['virtual_server_list']))
{% block content %}
{# template_data is a list #}
{# example data:
template_data = [
{
'name': 'n1',
'address': 'a1',
'vport_list': [
{
'vport_name': 'vp1',
'service_group': 'group1',
'port': 8000
}]
}]
#}
{% for row in template_data %}
{# row is a dict - {'name': 'val', 'address': 'val'} #}
VIP Name: {{ row['name'] }}
VIP Address: {{ row['address'] }}
{# row['vport_list'] is a list #}
{% for port in row['vport_list'] %}
{# port is a dict - {'vport_name': 'val', 'service_group': 'val', 'port': 8000} #}
VPort Name: {{ port['vport_name'] }}
Service Group: {{ port['service_group'] }}
Port: {{ port['port'] }}
{% endfor %}
{% endfor %}
{% endblock %}