[英]WTForms returns None only when characters that are less than 3 are entered
所以我正在用 Flask 制作一个网页,并使用 WTForms 从搜索栏中获取输入。 如果我搜索任何 4 个或更多字符的内容,它就可以正常工作(“King”、“Love”、“hate”...等)如果我搜索任何小于 4 的内容(“as”、“for”、 “the” ...等),我从forms.search.data
得到“无”,除非我使用 ISBN 进行搜索,然后我可以搜索 3 个或更多字符,但不能更少。
表格代码:
class SearchForm(FlaskForm):
search = StringField('Search', validators=[DataRequired()])
type = SelectField('Type', choices=[('title', 'Title'), ('isbn', 'ISBN'), ('author', 'Author')])
submit = SubmitField('Search')
我尝试添加Length(min=0)
、 Length(min=1)
和Length(min=1, max=20)
但这没有帮助。
搜索 app.route 代码:
@app.route("/search", methods=['GET', 'POST'])
@login_required
def search():
form = SearchForm()
session['searchresult'] = form.search.data
if form.validate_on_submit():
if form.type.data == 'title':
session['books'] = Book.bsearchtitle(title=form.search.data)
elif form.type.data == 'isbn':
session['books'] = Book.bsearchisbn(isbn=form.search.data)
elif form.type.data == 'author':
session['books'] = Book.bsearchauthor(author=form.search.data)
return redirect(url_for('results'))
return render_template('search.html', title='Search for books', form=form)
我正在使用sessions['books']
将数据传递给结果 app.route。
结果 app.route 代码:
@app.route("/results")
@login_required
def results():
sbooks = session['books']
searchresult = session['searchresult']
temp = list()
for b in sbooks:
temp.append(json.loads(b))
books = list()
for t in temp:
books.append(Book(t[0], t[1], t[2], t[3], t[4]))
return render_template('results.html', title='Book search results', books=books, searchresult=searchresult)
我从 Werkzeug KeyError: 'books'
收到以下错误KeyError: 'books'
,它指向 ``app.route("/result") 顶部的那个。
如果我搜索“king”并获得结果,那么我搜索“the”它会转到结果页面并显示旧的“king”结果,但它告诉我这些是“None”的结果,因此值存储在searchresult
为None
。
因此,在使用 VSCode 进行调试后,在app.route("/search")
中的return redirect(url_for('results'))
处设置断点,则form.search.data
和session['books']
是正确的。 似乎session['books']
没有被传递给app.route("/results")
。 也许是因为数据库响应太大? 因为当我搜索 4 个字符的单词时,该应用程序运行良好。
事实证明,问题的原因是数据库查询响应太大而无法传递到session['books']
。
我想一种解决方案是在app.route("/results")
而不是app.route("/search")
调用数据库查询。 如果有人有任何其他想法,请分享。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.