我正在编写一个 Web 应用程序(在 Python 中,这并不重要)。功能之一是人们可以对事物发表评论。我有一个评论课,基本上是这样的:
class Comment:
user = ...
# other stuff
user
另一个类的实例在哪里,
class User:
name = ...
# other stuff
当然,在我的模板中,我有
<div>${comment.user.name}</div>
问题:假设我允许人们匿名发表评论。在那种情况下comment.user
是None
(未定义),当然访问comment.user.name
会引发错误。处理它的最佳方法是什么?我看到了三种可能性:
- 在模板中使用条件来测试这种情况并显示不同的内容。这是最通用的解决方案,因为我可以将匿名评论的显示方式更改为,例如“匿名发布”(而不是“发布者...”),但我经常被告知模板应该是无意识的显示机器而不包括这样的逻辑。此外,其他人可能最终会为同一个应用程序编写替代模板,我觉得我应该让模板编写者的事情尽可能简单。
user
当真实用户未定义时,为 a 的属性实现一个访问器方法,该方法Comment
返回一个虚拟用户对象。这个虚拟对象将具有user.name = 'Anonymous'
或类似的东西,因此模板可以访问它并打印其名称而不会出错。- 在我的数据库中放入与用户
user.name = Anonymous
(或类似用户)相对应的实际记录,然后将该用户分配给没有人登录时发布的任何评论。我知道我见过一些以这种方式运行的真实系统。(phpBB?)
在编写这类系统的人中,是否存在一种普遍的智慧,即哪些(或其他解决方案)是最好的?如果我选择一种方式与另一种方式,我应该注意什么陷阱?谁给出了最好的解释,谁就会得到复选标记。