繁体   English   中英

WTForms 仅在输入小于 3 的字符时才返回 None

[英]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”的结果,因此值存储在searchresultNone

编辑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")调用数据库查询。 如果有人有任何其他想法,请分享。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM