繁体   English   中英

Django 1.1中经过身份验证的评论?

[英]Authenticated commenting in Django 1.1?

(现在Django 1.1处于发布候选状态,现在可能是问这个问题的好时机。)

我一直在寻找各种方法来扩展Django的评论应用程序以支持经过身份验证的评论。 在阅读了评论模型几次之后,我发现UserForeignKey已经存在。

来自django.contrib.comments.models

class Comment(BaseCommentAbstractModel):
    """
    A user comment about some object.
    """

    # Who posted this comment? If ``user`` is set then it was an authenticated
    # user; otherwise at least user_name should have been set and the comment
    # was posted by a non-authenticated user.
    user        = models.ForeignKey(User, verbose_name=_('user'),
                    blank=True, null=True, related_name="%(class)s_comments")
    user_name   = models.CharField(_("user's name"), max_length=50, blank=True)
    user_email  = models.EmailField(_("user's email address"), blank=True)
    user_url    = models.URLField(_("user's URL"), blank=True)

我似乎无法理解设置user 如果我按原样使用注释,即使我已经过身份验证,它似乎仍然需要其他字段。 我猜我应该覆盖表格并在那里做? 最重要的是,如果我使用user ,我应该忽略user_nameuser_emailuser_url为空的事实,只是从相关的配置文件模型中提取信息,对吗?

虽然答案最终可能是微不足道的,但我只是惊讶于它没有被写入甚至被谈论过。

WordPress和其他系统使这一切变得简单。 如果您已登录,则评论表单应该“做正确的事”并删除名称/电子邮件/网址字段。 这不是一个框架应该为你做的那种繁重的举动吗?

我发现在模板中手动构建表单并提供所需的隐藏字段值,而不是使用子类化模​​型来处理那些应该非常简单的事情。 这适用于仅接受来自经过身份验证的用户的评论的网站:

{% if user.is_authenticated %}
{% get_comment_form for [object] as form %} 
<form action="{% comment_form_target %}" method="POST"> 
    {% csrf_token %}
    {{ form.comment }} 
    {{ form.honeypot }} 
    {{ form.content_type }} 
    {{ form.object_pk }} 
    {{ form.timestamp }} 
    {{ form.security_hash }} 
    <input type="hidden" name="next" value="{% url [the_view] [object].id %}" />
    <input type="submit" value="Add comment" id="id_submit" /> 
</form> 
{% else %}
    <p>Please <a href="{% url auth_login %}">log in</a> to leave a comment.</p>
{% endif %} 

请注意,这将使蜜罐字段可见; 你想要在CSS中隐藏它:

#id_honeypot {
    visibility:hidden;
}

如果要为匿名用户或经过身份验证的用户启用注释,请将上面的auth_login行替换为对注释表单的标准调用。

我建议您在提出有关Django内部的问题时,先看看源代码。

如果我们查看post_comment 视图开头,我们会看到复制了POST querydict并插入了用户的电子邮件和名称。 它们仍然是必需的(如表格的来源所示 ),因此这些细节必须在表格中输入或用户必须提供。

要向Superjoe回答您的问题,视图会​​在保存之前将用户附加到注释( 在post_comment视图的末尾附近看到 )。

除了用户名和密码之外,还可以使用Profile模型获取额外的帐户数据 如果在Profile中包含此行,则可以调用user.get_profile():

user = models.ForeignKey(User, unique=True)

和settings.py中的这一行:

AUTH_PROFILE_MODULE = 'yourapp.Profile'

首先,评论应用程序已经支持经过身份验证的用户和匿名用户,因此我假设您只想接受经过身份验证的用户的评论?

Thejaswi Puthraya在他的博客上发表一系列 文章来解决这个问题。 基本上,他预先填充注释表单中的nameemail字段,并用隐藏字段替换它们,然后定义post_comment周围的包装器视图,以确保用户发布注释与登录用户相同,等等。 看起来很简单,虽然可能有点单调乏味。

他的博客目前似乎已经失败了......希望这只是暂时的。

Theju写了一个经过验证的评论应用程序 - http://thejaswi.info/tech/blog/2009/08/04/reusable-app-authenticated-comments/

根据评论,它是 - 或者:其他字段是在设置useruser 您是否检查过相关列绝对不是NULL? 它们被标记为blank=True ,通常表示required=False在字段级别required=False 如果您已经尝试过,那么您会遇到什么错误?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM