Flask和Python如何为MySQL数据库数据制作搜索引擎
我想做一个搜索引擎,可以通过输入学生的名字来查找他们的信息,使用的是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", 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 %}
当我点击搜索按钮时,什么也没有发生。我检查了数据库,里面有一些数据,所以不是空的。我找不到我哪里出错了,请帮帮我?
1 个回答
11
确保操作指向正确的链接
我觉得你在渲染表单时,提交表单的链接设置错了。
你现在的版本使用的是 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请求时,第一轮就返回了 redirect
。
@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')) # <- Here you jump away from whatever result you create
return render_template('search.html')
要渲染你的模板以显示最终报告
你的代码在处理POST请求时,没有显示出任何尝试去渲染你在数据库中找到的内容。
与其用 print r[0], r[1]...
,你应该调用 render_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')