首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >改进Django网络论坛现有的徽章系统

改进Django网络论坛现有的徽章系统
EN

Stack Overflow用户
提问于 2016-05-03 03:11:35
回答 1查看 104关注 0票数 0

我有一个Django论坛,用户在论坛上发表评论并相互交流。每个人都有一个昵称,每个评论可以写250个字符。此外,还提供了上票/否决功能来规范评论的质量。

此外,一些*经过验证的*用户会得到徽章。目前只有一种类型的徽章,并分发给具有某种实际技能的用户(我们通过背景调查来验证这一点)。

每个徽章只显示一个*旁边的一个人的昵称。例如:

mhb11:你看过即将上映的内战电影的评论了吗?这里:链接 Swindon-411*:我打赌BvS > MCW :-D samantha1:哦,天哪!

上面的Swindon-411*就是其中一个经过验证的用户。我在nicknames.py中列出了所有已验证的昵称,然后将列表导出到views.py。然后,在项目的每个Django模板中,我都这样做:

代码语言:javascript
复制
{% for person in verified %}
      {% if person == comment.submitter.username %}
            <span style="color:orange;"><b>*</b></span>
      {% endif %}
{% endfor %}

我的大多数模板都包含这个逻辑(模板不应该包含这个逻辑)。该项目规模很小,因此这一方法具有典型的工作效果。现在我们的用户已经扩展了,我们也增加了更多的徽章。我想重构一下我实现这个方法的方式。

在我的Django web应用程序中,实现这一点的最不需要性能的、可伸缩的方法是什么?我应该有一个中间件来读取每个请求,并在昵称旁边连接一个徽章吗?我应该把它作为一个属性搬到DB吗?我的应用程序中的每个User都来自django.contrib.auth.models

对我来说最好的答案是一个概述你将如何去做的答案,还有一个说明性的例子。我使用Django < 1.8,我的后端是PostgreSQL。提前谢谢。这个项目让我学到了很多东西,这里的学习还在继续。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-03 04:03:46

海事组织,你绝对应该把它移到你的数据库里。手动维护列表现在似乎是个好主意,但不能扩展,以后不可避免地会引起头痛。

最简单的方法是创建一个UserProfile模型(见文档),该模型可用于存储此信息和任何其他用户信息:

代码语言:javascript
复制
from django.conf import settings

class Profile(models.Model):
    # Tie this profile to a specific user.
    # You may need to set null=True if migrating a bunch of existing users
    # who don't have a profile.
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    verified = models.BooleanField(default=False)

然后您可以使用标准的反向关系从任何地方访问它:

代码语言:javascript
复制
  {% if person.profile.verified %}
       <span style="color:orange;"><b>*</b></span>
  {% endif %}

还应该确保将适当的select_related调用添加到查询集中,以便在同一个DB查询中获取用户和概要文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36994980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档