我有兴趣在我的应用程序的每个页面上显示最近搜索的术语(存储在数据库中)。乍一看,似乎layout.html将是此功能的最佳位置。我需要运行数据库查询,它们看起来像这样:
{{import pymongo}}
{{db = pymongo.MongoClient()}}
{{result = db.collection.distinct("search_term")}}
{{etc...}}
我不确定这是最明智的想法。在安全性方面,我应该关注从视图中运行数据库查询吗?还有其他选择吗?
答案 0 :(得分:2)
没有安全问题,因为视图在服务器上执行。但是,更好的做法是将该代码移动到模型文件中,然后简单地在布局中显示结果(模型文件中定义的任何对象都将在视图的执行环境中可用)。
在模型文件中:
import pymongo
db = pymongo.MongoClient()
result = db.collection.distinct("search_term")
然后在layout.html:
{{for record in result:}}
[code to display record]
{{pass}}
另一个选择是将代码移动到一个模块,然后简单地导入并调用布局中的一个函数(这个想法是将视图限制为仅与显示相关的代码,特别是因为它有点难以阅读和调试视图中的Python代码。)