-1

mysqldb を使用してローカルに作成したデータベースから isbn 、 author 、 year 、 title を読み取るために、検索フォームを作成しようとしています。いくつかのウェブサイトに沿って熟考し、それを実現するためのチュートリアルを試しても、これを行うための最適な方法を見つけることができません. 今私がやったことはこれです。Python コード

@app.route('/search_results/<query>', methods = ['GET','POST'])
@is_logged_in
def search_results(query):
    cur=mysql.connection.cursor()
    likeString = "'%%" + query + "%%'"
    result = cur.execute("SELECT * FROM books WHERE %s  LIKE %s;", (query, likeString)) 
    if result > 0:
        data  = cur.fetchall()
    return render_template('search_results.html' , data = search)
    else:
        error = 'Nothing found'
        return render_template('dashboard.html' , error = error)
    return render_template('dashboard.html')




@app.route('/dashboard')
@is_logged_in
def dashboard():
  search = SearchForm(request.form)
if request.method == 'POST':
    select = form.select.data
    search = form.search.data
    query = select + search
    return redirect((url_for('search_results', query = query)))
return render_template('dashboard.html', form = search)

そして私のhtmlコードは次のとおりです:-

{% extends 'layout.html' %}

{% block body %}
<h1>Dashboard <small>Welcome {{session.username}}</small></h1>

{% from "includes/_formhelpers.html" import render_field %}

<form action="/search_results/{{form.select}}/{{form.search}}" method=post>

<dl>

{{ render_field(form.select) }}

<p>

{{ render_field(form.search) }}

</dl>

<p><input type=submit value=Search>

</form>
</div>
{% for message in get_flashed_messages() %}
<div class=flash>
{{ message }}
</div>
{% endfor %}

{% endblock %}

次のように検索を表示するヘッダー H1 以外は何も含まれていない、分離された search_results.html も作成しました。 <h1>{{search}}</h1>

4

2 に答える 2

1

@Bendebaria のGETandPOSTルートのパターンを見たことはありませんが、テストしていないため、動作しないことを確認できません (ただし、そのように複数のルートが定義されている場合は動作しないと思われます)。Flask の公式ドキュメント ( http://flask.pocoo.org/docs/1.0/quickstart/#http-methods ) では、次のように記述しています。

from flask import request

@app.route('/search', methods=['GET', 'POST'])
def search():
    if request.method == 'POST':
        return do_the_db_search()
    else:
        return show_the_search_form()

しかし、確かに彼が言うように、 は必要ありません。redirect実際には、既存のルーティングの一部として通常の関数を呼び出し、render_templateそれらの中で a を返すことができます。

于 2018-08-10T06:04:13.833 に答える
0

を使用しないでくださいredirect()。POST と GET を別々に処理することができ、必要なのはレンダリングだけです。何かのようなもの:

search = SearchForm(request.form)
@app.route('/dashboard')
@is_logged_in

def get():
    return render_template('dashboard.html', form = self.search)

def post():
    select = form.select.data
    search = form.search.data
    query = select + self.search
    return render_template('search_results', result = result)
于 2018-08-09T11:35:28.943 に答える