WTForms returns None 仅当输入小于3个字符时

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 得到 "None",除非我使用 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' 收到以下错误,它指向 ``app.route("/result").

顶部的错误

额外信息

如果我搜索 "king" 并获得结果,然后我搜索 "the" 它会转到结果页面并显示旧的 "king" 结果,但它告诉我这些是 "None" 的结果,因此 searchresult 中存储的值是 None.

编辑 1:

所以使用VSCode调试后,在app.route("/search")中的return redirect(url_for('results'))处设置断点,form.search.datasession['books']的值是正确的。 session['books'] 似乎没有传递给 app.route("/results")。也许是因为数据库响应太大?因为当我搜索 4 个字符的单词时,该应用程序工作正常。

原来问题的原因是数据库查询响应太大,无法传递到 session['books']

我想一种解决方案是在 app.route("/results") 而不是 app.route("/search") 中调用数据库查询。 如果有人有任何其他想法,请分享。