我正在尝试创建一个Flask应用程序,该应用程序在网页上有一个文本框。按下Submit时,它将搜索在postgres datbase表的文本框中输入的内容。
我遇到以下错误:
错误请求:浏览器(或代理)发送了一个请求,要求该服务器无法 了解。”
我的代码如下:
app.py
from flask import Flask, render_template, request
from sqlalchemy import create_engine
app = Flask(__name__)
app.config['DEBUG']
db_string = "postgres://xx:xx@xx:5432/xx"
db = create_engine(db_string)
@app.route('/', methods=['GET', 'POST'])
def homepage():
jn = request.form['jobnumber']
result_set = db.execute("SELECT cost FROM public.options where optionno = (f'%{jn}%')").fetchall()
return render_template('main.html', test=result_set, jn=jn)
if __name__ == "__main__":
app.run(debug=True)
和我的html文件:
main.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>xxx</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="{{ url_for('static', filename='css/bootstrap.min.css') }}" rel="stylesheet">
<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}">
</head>
<body>
<p>xxx</p>
<form method="POST">
<input name="jobnumber" type="submit" placeholder="jn">
</form>
<table>
<td>
{{test}}
</td>
</table>
</body>
</html>
我敢肯定,这确实是一件容易和简单的事情,可以解决它,但是我一直在努力,所以任何帮助将不胜感激。
答案 0 :(得分:0)
由于您的homepage
函数同时接收GET和POST请求,因此您需要分别处理每种情况。收到GET请求时,您没有request.form
。
@app.route('/', methods=['GET', 'POST'])
def homepage():
if request.method == 'POST'
jn = request.form['jobnumber']
result_set = db.execute("SELECT cost FROM public.options where optionno = (f'%{jn}%')").fetchall()
return render_template('main.html', test=result_set, jn=jn)
else:
return render_template('main.html')
请注意,将用户输入直接输入到您的SQL查询中而不清理它是很危险的,因为它会使您的应用受到SQL injection攻击。