【问题标题】:Web2py: Database queries from within layout.htmlWeb2py:来自 layout.html 的数据库查询
【发布时间】:2015-03-13 09:56:45
【问题描述】:

我有兴趣在我的应用程序的每个页面上显示最近搜索的字词(存储在数据库中)。乍一看,layout.html 似乎是这个函数的最佳位置。我需要运行数据库查询,它们看起来像这样:

{{import pymongo}}
{{db = pymongo.MongoClient()}}
{{result = db.collection.distinct("search_term")}}
{{etc...}}

我不确定这是不是最明智的想法。在安全性方面,我是否应该关注从视图中运行数据库查询?还有其他选择吗?

【问题讨论】:

    标签: mongodb web2py


    【解决方案1】:

    不存在安全问题,因为视图是在服务器上执行的。但是,更好的做法是将代码移到模型文件中,然后简单地在布局中显示结果(模型文件中定义的任何对象都将在视图的执行环境中可用)。

    在模型文件中:

    import pymongo
    db = pymongo.MongoClient()
    result = db.collection.distinct("search_term")
    

    然后在layout.html中:

    {{for record in result:}}
    [code to display record]
    {{pass}}
    

    另一种选择是将代码移动到一个模块中,然后简单地导入并调用布局中的一个函数(这个想法是将视图限制为仅与显示相关的代码,特别是因为它有点难以阅读和调试视图中的 Python 代码)。

    【讨论】:

    • 啊,好电话。我已经在 db.py 中做了类似的事情,但由于某种原因,我也没有想到把它放在那里。尽管如此,很高兴在这种类型的实现中没有额外的安全问题。
    猜你喜欢
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    相关资源
    最近更新 更多