python 将搜索结果从SQLAlchemy/Flask发送到Jinja模板的问题

5jvtdoz2  于 2023-04-04  发布在  Python
关注(0)|答案(1)|浏览(98)

我正在制作一个Web应用程序,用于搜索包含我观看的电影,节目,书籍,游戏等的个人SQLite数据库。我正在通过制作一个搜索函数来测试它。我想将三个查询组合成一组结果,然后在我的Jinja模板上迭代这些结果以显示它们。搜索查询是用flask/sqlalchemy完成的,如下所示:

if(request.method=="POST" and len(request.form["searchBar"]) > 0):
        searchVal = request.form["searchBar"]
        startSearch = "%{}"
        genSearch = "%{}%"

        query1 = Media.query.filter_by(title=searchVal)
        query2 = Media.query.filter(Media.title.like(startSearch.format(searchVal)))
        query3 = Media.query.filter(Media.title.like(genSearch.format(searchVal)))

        searchQuery = query1.union(query2, query3).all()
        session["results"] = searchQuery

        return redirect(url_for("results"))

预期的行为是它重定向到“results”,它使用session["results"]将数据传递到我的jinja模板。然而,在它到达results函数之前,无论出于什么原因,我的POST请求得到了500响应。当我运行它时,控制台中有很多输出,但重复出现的消息似乎是TypeError: Object of type Media is not JSON serializable
为什么会发生这种情况?我想当我执行.all()时,它会给我一个可以迭代的列表。在任何情况下,我首先在哪里尝试使其JSON可序列化?
谢谢你的帮助
编辑:这里是媒体类的定义

class Media(db.Model):
    mediaid = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.Text)
    year = db.Column(db.Integer)
    status = db.Column(db.Text)
    mediatype = db.Column(db.Text)
    seriesid = db.Column(db.Integer, db.ForeignKey('series.seriesid'))
    externalinfo = db.Column(db.Text)
    extranotes = db.Column(db.Text)
g6ll5ycj

g6ll5ycj1#

默认情况下,Flask将会话存储在客户端Web浏览器的cookie中
这对于简单的任务很好
但是,当您需要序列化稍微复杂的东西(如日期或小数)时,它就不能很好地工作了。
我建议安装和使用Flask-Session,以便使用服务器端会话,它可以更好地处理序列化的事情:
pip install flask-session
在www.example.com中app.py:

...
from flask_session import Session
...

app = Flask(__name__)
app.config["SECRET_KEY"] = "s3cr3t"
app.config["SESSION_TYPE"] = "filesystem"

Session(app)

那应该能用

相关问题