【问题标题】:403 error using django_comments [closed]使用 django_comments 时出现 403 错误 [关闭]
【发布时间】:2016-07-18 15:56:58
【问题描述】:

我使用 django_cmets 作为我网站的评论系统,但是当我发表评论时,它给出了 403 错误。为什么?

这是我的设置:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    #'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
)

其他形式效果很好。他们不会给出 403 错误。

【问题讨论】:

  • 但是其他形式也很好用。为什么?

标签: django django-forms


【解决方案1】:

您的其他表单可以正常工作,因为您禁用了 CSRF 中间件。这是一个坏主意,因为它会使您的网站容易受到 CSRF 攻击。

来自 django_cmets 的 post_comment 视图明确使用了 csrf_protect 装饰器。因此,您必须在模板的表单标签中包含{% csrf_token %},以防止出现 CSRF 错误。

如果还是有问题,那很可能是视图。 As the docs say,一定要确保模板是用request对象渲染的,否则{% csrf_token %}标签不起作用。

【讨论】:

  • 但是我使用的是基于 django_comment 的第三方评论系统。这是我的 html 代码{% load threadedcomments_tags %} .... <h2>Comments for {{ object.title }}:</h2> {% render_comment_list for object %} {% render_comment_form for object %} 作者博客中的代码运行良好,但在我的网站中出现 403 错误,为什么?
  • 您的视图可能没有在模板上下文中包含request,因此csrf_token 标记将不起作用。
  • 但是我不需要写视图,因为你可以通过像这样包含html代码来使用它,{% load threadedcomments_tags %} .... <h2>Comments for {{ object.title }}:</h2> {% render_comment_list for object %} {% render_comment_form for object %}对于request我不知道我应该在哪里包含.顺便说一句,我使用 pip 下载评论。
  • 显示您使用评论表单的视图。否则我帮不了你。
  • 这是我找到第三方评论系统的地方。这是网址:answ.me/post/comment-in-django-part-1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
相关资源
最近更新 更多