Обработка данных на стороне сервера с помощью Python (Flask / Postgresql) - PullRequest
0 голосов
/ 29 апреля 2019

Во-первых, вот что я использую: Python 3, Flask, PostgreSQL, тема начальной загрузки.

Что я хочу сделать?

У меня есть таблица с почти 34000 значений,Проблема, страница загружается очень медленно из-за количества значений.Как я могу улучшить производительность, используя обработку на стороне сервера (или другую) с Python и Flask?

Код:

Вот часть моего main.py:

@login_required
def home():
    connect() # Connect to the PG database
    connect.cur.execute("""SELECT * FROM test""")
    test_execute = connect.cur.fetchall()

    count_equipement()

    return render_template('index.html',
    value=test_execute, 
    value2=count_equipement.nb_equipement,
    value3=check_ok.nb_ok,
    value4=check_ko.nb_ko)

test_execute получить все значения из моей таблицы.В моем index.html вот как я показываю данные:

<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
  <thead>
    <tr>
      <th>First</th>
      <th>Second</th>
      <th>Third</th>
      <th>Fourth</th>
      <th>Fifth</th>
    </tr>
  </thead>
  <tfoot>
    <tr>
      <th>First</th>
      <th>Second</th>
      <th>Third</th>
      <th>Fourth</th>
      <th>Fifth</th>
    </tr>
  </tfoot>
  <tbody>
    {% for row in value %}
    <tr>
      <td>{{row[0]}}</td>
      <td><a href="{{ url_for('site', site_id=row[1]) }}">{{row[1]}}</a></td>
      <td>{{row[2]}}</td>
      <td>{{row[3]}}</td>
      <td>{{row[4]}}</td>                    
    </tr>
    {% endfor %}
  </tbody>
</table>

В моей теме начальной загрузки есть .js для правильной разбивки таблицы.Вот результат с 8 значениями:

Table

Как мне выполнить обработку на сервере?Я уже проверил эту ссылку , но я не думаю, что смогу применить это в моем случае ...

1 Ответ

0 голосов
/ 07 июня 2019

Вот ответ на мой вопрос. (комментарии на французском)

@app.route('/stack', )
@app.route('/stack/<int:page>', defaults={'page': 1})
@login_required
def stack(page):
    """
        retourne la page 1 par défaut, puis change selon le numéro /4 par ex
    """
    connect()
    connect.cur.execute("""SELECT COUNT(*) FROM mydatabase""")
    count = connect.cur.fetchall()
    count = count[0][0]

    check.count()
    PER_PAGE = 10

    offset = ((int(page)-1) * PER_PAGE)
    connect.cur.execute("""SELECT *
                        FROM mydatabase
                        ORDER BY table1 OFFSET %s LIMIT %s""" % (offset, PER_PAGE))

    solutions = connect.cur.fetchall()

    # Display a 409 not found page for an out of bounds request
    if not solutions and page != 1:
        return(render_template('404.html', errmsg="Requested page out of bounds"), 404)
    pagination = Pagination(page, PER_PAGE, count)
    return(render_template('index.html',
                           r=request,
                           value=solutions,
                           pagination=pagination))


def url_for_other_page(page):
    """
    récupère l'url
    """
    args = request.view_args.copy()
    args['page'] = page
    return url_for(request.endpoint, **args)
app.jinja_env.globals['url_for_other_page'] = url_for_other_page

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...