Flask和Python如何从mysql数据库中创建数据搜索引擎
我想通过在html输入字段中输入学生的名字来为学生的信息创建某种搜索引擎,但我的代码有一些问题。不过,我正在使用Flask和Python。 以下是我的project.py代码:Flask和Python如何从mysql数据库中创建数据搜索引擎,python,mysql,flask,Python,Mysql,Flask,我想通过在html输入字段中输入学生的名字来为学生的信息创建某种搜索引擎,但我的代码有一些问题。不过,我正在使用Flask和Python。 以下是我的project.py代码: @app.route('/search', methods=['GET', 'POST']) def search(): if request.method == "POST": db = MySQLdb.connect(user="root", passwd="", db="cs324", ho
@app.route('/search', methods=['GET', 'POST'])
def search():
if request.method == "POST":
db = MySQLdb.connect(user="root", passwd="", db="cs324", host="127.0.0.1")
c=db.cursor()
c.executemany('''select * from student where name = %s''', request.form['search'])
for r in c.fetchall():
print r[0],r[1],r[2]
return redirect(url_for('search'))
return render_template('search.html')
以下是我的search.html代码:
{% extends "hello.html" %}
{% block content %}
<div class="search">
<form action="" method=post>
<input type=text name=search value="{{ request.form.search}}"></br>
<div class="actions"><input type=submit value="Search"></div>
</form>
</div>
{% for message in get_flashed_messages() %}
<div class=flash>
{{ message }}
</div>
{% endfor %}
{% endblock %}
{%extensed“hello.html”%}
{%block content%}
{get_Flash_messages()%中的消息为%s}
{{message}}
{%endfor%}
{%endblock%}
当我点击“搜索”按钮时,什么也没发生,我检查了数据库,其中有一些数据,所以它不是空的,我找不到哪里出错,请帮助?确保,操作指向正确的url
我认为您在提交表单时使用了错误的操作
您的版本使用的是action=“
,我猜应该是action=“/search”
因此,您的模板应更改为:
{% extends "hello.html" %}
{% block content %}
<div class="search">
<form action="/search" method=post>
<input type=text name=search value="{{ request.form.search}}"></br>
<div class="actions"><input type=submit value="Search"></div>
</form>
</div>
{% for message in get_flashed_messages() %}
<div class=flash>
{{ message }}
</div>
{% endfor %}
{% endblock %}
是否为最终报告呈现模板
您的代码不会在POST分支中显示任何试图呈现您在数据库中找到的内容的尝试
您应该调用render\u template()
像这样的
@app.route('/search', methods=['GET', 'POST'])
def search():
if request.method == "POST":
db = MySQLdb.connect(user="root", passwd="", db="cs324", host="127.0.0.1")
c=db.cursor()
c.executemany('''select * from student where name = %s''', request.form['search'])
return render_template("results.html", records=c.fetchall())
return render_template('search.html')
您是否检查了浏览器的错误控制台?如果在地址栏中键入
/search
,会发生什么情况?是的,我甚至尝试过放置app.run(debug=True),但它没有显示任何内容,看起来它只是刷新search.html页面。@SrdjanRistic当您单击按钮时,您在web应用访问日志中看到任何条目吗?它声明了什么url?然后,如果它点击了你期望的url,它会显示:就是这样。当我删除重定向到搜索页面时,它仍然会这样做……我建议您不要在视图中使用与连接相关的人员,而是为db connection创建一个单独的方法,并在应用程序生命周期中保留它,并且您可以使用flask sqlalchemy来处理与数据库相关的问题matters@SrdjanRistic我扩展了我的回答,还有另外两个问题-您从第一次迭代中创建的内容重定向出去。你还忘了在发帖返回时呈现结果页面。为什么request.form()
采用“搜索”而不是“/search”?@Pyderman因为有两个概念,一个是url上的路径(“/search”
),另一个是要填入表单的默认值(这是request.form.search
)。这些概念有不同的含义,不能混用。
@app.route('/search', methods=['GET', 'POST'])
def search():
if request.method == "POST":
db = MySQLdb.connect(user="root", passwd="", db="cs324", host="127.0.0.1")
c=db.cursor()
c.executemany('''select * from student where name = %s''', request.form['search'])
return render_template("results.html", records=c.fetchall())
return render_template('search.html')