gpt4 book ai didi

python - 仅当输入少于 3 个字符时,WTForms 返回 None

转载 作者:太空宇宙 更新时间:2023-11-03 19:51:14 24 4
gpt4 key购买 nike

所以我正在使用 Flask 制作一个网页,并使用 WTForms 从搜索栏获取输入。如果我搜索 4 个或更多字符的任何内容,效果很好(“King”、“Love”、“hate”...等)如果我搜索任何小于 4 的内容(“as”、“for”、“the”...等),我会从 forms.search.data 得到“None” ,除非我使用 ISBN 进行搜索,然后我可以使用 3 个或更多字符进行搜索,但不能少于 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 调试后,在 return redirect(url_for('results')) 下断点在app.route("/search")form.search.data 的值和session['books']是正确的。看来session['books']没有被传递到app.route("/results") 。也许是因为数据库响应太大?因为当我搜索 4 个字符的单词时,该应用程序运行良好。

最佳答案

事实证明,问题的原因是数据库查询响应太大,无法传递到 session['books'] 中。

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

关于python - 仅当输入少于 3 个字符时,WTForms 返回 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59830371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com