Используя flask, как я могу вернуть строку данных в виде списка

Я пытаюсь заставить свой маршрут возвращать строку в формате списка, но он возвращает конкатенацию элементов строки. Как я могу вернуть строку данных в формате списка?

Вот что я хочу, чтобы он возвращал: ['field1', 'field2', 'field3', 'field4', 'field5']

По-видимому, он возвращает следующее: ['field1' 'field2' 'field3' 'field4' 'field5']

Вот мой файл app.py:

from flask import Flask, render_template, json, redirect, request
import pandas as pd 
 
# Flask constructor
app = Flask(__name__)
 
# Data setup
salary_table = pd.read_csv("salaries.csv")
salary_table.fillna('', inplace=True)
headings = list(salary_table.columns)
print(headings)
data = list(salary_table.values)
print(data)

# Homepage URL call
@app.route("/")
def home():
    return render_template("home.html", headings=headings, data=data)

@app.route('/GetPlayerInfo/<row>')
def GetPlayerInfo(row):
    return row

# Listener
if __name__ == "__main__":
    app.run(port=2509, debug=True)
<
<html>
<head>
</head>
<body>
  <div class="tableContainerDiv">
    <table class="table">
      <tr class="header">
        {% for header in headings %}
        <th class="cell">{{header}}</th>
        {% endfor %}
        <th>Info</th>
      </tr>
      {% for row in data %}
      <tr class="row">
        {% for cell in row %}
        <td class="cell">{{cell}}</td>
        {% endfor %}  
        <td><a href="GetPlayerInfo/{{row}}">Info</a></td>
      </tr>
      {% endfor %}
    </table>
  </div>  
</body>
</html>

Создание запроса со всей строкой не нужно и требует дополнительной бухгалтерии. Вместо этого используйте уникальный идентификатор (желательно) или индекс. Этот идентификатор дает серверу все необходимое, чтобы найти ресурс, над которым клиент хочет произвести действие.

Индекс менее идеален, потому что если другие клиенты смогут добавлять или удалять строки из набора данных после того, как другой клиент загрузил его, все сломается. Но похоже, что ваши данные статичны (пока), поэтому индекс кажется безопасным.

app.py:

@app.route('/info/<int:row_id>')
def info(row_id):
    row = data[row_id]
    response = microservice_get(row) # pretend microservice call
    microservice_payload = json.loads(response.text)
    render_template("info.html", data=microservice_payload) # or whatever

home.html:

{% for row in data %}
<tr class="row">
  {% for cell in row %}
  <td>{{cell}}</td>
  {% endfor %}  
  <td>
    <a href="{{url_for('info', row_id=loop.index)}}">Info</a>
  </td>
</tr>
{% endfor %}

Это немного упрощенный вариант: Я не делал проверку ошибок и не знаю, как будет выглядеть вызов микросервиса, поэтому я предполагаю, что вы займетесь этим дальше.

В данном примере обработчик блокируется до получения ответа микросервиса. Если запрос выполняется долго, возможно, вы захотите поместить его в рабочую очередь и позже сообщить клиенту о статусе с помощью отправляемого сервером события или чего-то подобного. Но все это немного умозрительно.

Я позволил себе переименовать маршрут в info, что больше соответствует типичным URL-адресам.

Вернуться на верх