【问题标题】:How to build a simple search form in flask using mysqldb如何使用 mysqldb 在烧瓶中构建一个简单的搜索表单
【发布时间】:2023-03-11 05:35:01
【问题描述】:

我一直在尝试构建一个搜索表单,从我使用 mysqldb 在本地创建的数据库中读取 isbn、作者、年份和标题。 即使我在几个网站上进行了思考,尝试了教程来实现它,我也找不到最佳的方法来做到这一点。现在我所做的是这个。 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 %}

我还创建了一个单独的 search_results.html,它除了显示搜索的标题 H1 之外不包含任何内容,如下所示 &lt;h1&gt;{{search}}&lt;/h1&gt;

【问题讨论】:

  • 请包含您的库依赖项,因为这也有助于其他人探索问题。

标签: python html mysql flask flask-wtforms


【解决方案1】:

我从未见过 @Bendebaria 的 GETPOST 路由模式,但还没有测试,所以我无法确认它不起作用(尽管我怀疑如果你有它不会多条路线以这种方式定义)。 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

【讨论】:

  • @Bendebaria 的 GET 和 POST 路由模式实际上是实现 Flask Routes 的一种方法,不幸的是,由于 searchForm 是在外部创建的,因此会发生错误。但是调用函数是一个不错的选择。谢谢
  • 如何从搜索表单中获取内容?
【解决方案2】:

您不应该使用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)

【讨论】:

    猜你喜欢
    • 2017-12-02
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 2020-09-28
    相关资源
    最近更新 更多