Как разбить результаты на страницы из строки поиска и избежать взлома в Flask?

#python #flask

#python #flask

Вопрос:

Что я могу сделать, если разбивка на страницы прерывается после первой страницы, когда я указываю ключевое слово в форме для результатов поиска? Когда я перелистываю страницы без каких-либо фильтров, все работает отлично. У меня была такая же проблема в моем проекте Django, но я исправил ее, создав пользовательский тег шаблона, это было сложно, и теперь мне не удается найти какое-либо решение для моего приложения Flask. Есть идеи? Возможно, изменение URL?

1-я страница, когда указано ключевое слово «jquery»:

1-я страница

2-я страница — полностью нарушает разбивку на страницы и результат поиска:

2-я страница

VIEWS.PY

 @app.route('/cve_list', methods=['GET', 'POST'])
def cve_list():
    search_form = SearchForm()
    page = request.args.get('page', 1, type=int)
    cve = CVE.query.order_by(CVE.date.desc()).paginate(page=page, per_page=2)

    if search_form.validate_on_submit():  # = when search_form was submitted
        form_data = search_form.search.data
        query = CVE.query.filter(CVE.content.contains(f'{form_data}')).paginate(page=page, per_page=2)
        cve_amount = CVE.query.filter(CVE.content.contains(f'{form_data}')).count()
        if cve_amount > 0:
            flash(f'Found {cve_amount} vulnerabilities based on your search - {form_data}', 'success')
        else:
            flash(f'No vulnerabilities found based on your search - {form_data}', 'warning')

        return render_template('cve_list.html',
                               title=f'Cve{form_data}',
                               form=search_form,
                               cve=query,
                               cve_amount=cve_amount)
    return render_template('cve_list.html',
                           title='Cve List',
                           form=search_form,
                           cve=cve)
  

HTML

 {% for cve in cve.items %}
           <article class="media content-section">
              <div class="media-body">
                 <div class="article-metadata">
                    <a class="mr-2">{{ cve.title }}</a>
                    <small class="text-muted">{{ cve.date }}</small>
                 </div>
                 <p class="article-content">{{ cve.content }}</p>
              </div>
           </article>
           {% endfor %}

            <!-- PAGINATION -->
          {% for page_num in cve.iter_pages(left_edge=1, right_edge=1, left_current=1, right_current=2) %}
                {% if page_num %}
                    {% if cve.page == page_num %}
                        <a class="btn btn-info mb-4" href="{{ url_for('cve_list', page=page_num) }}">{{ page_num }}</a>
                    {% else %}
                        <a class="btn btn-outline-info mb-4" href="{{ url_for('cve_list', page=page_num) }}">{{ page_num }}</a>
                    {% endif %}
                {% else %}
                {% endif %}
            {% endfor %}
      <!-- PAGINATION -->