首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >评论没有被删除

评论没有被删除
EN

Stack Overflow用户
提问于 2019-03-13 15:04:45
回答 2查看 40关注 0票数 0

我为一个博客做了一个评论模型,我想给用户一个删除注释的方法,所以我为它做了一个基于函数的视图,但是它不起作用,所以我决定使用一个基于类的视图,但是这两个视图都有相同的错误。唯一发生的事情是,url在它之后得到一个?,页面就会刷新。下面给出了基于函数的视图和基于类的视图。

func基

代码语言:javascript
复制
def comment_delete(request, pk):
    comment_to_delete=get_object_or_404(comment,pk=pk)
    if request.method=='POST':
        post_url=comment_to_delete.content_object.get_absolute_url()
        comment_to_delete.delete()
        messages.success(request, 'Your comment has been deleted')
        return HttpResponseRedirect(post_url)

    context={
        'comment':comment_to_delete
    }
    return render(request, 'blog/confirm_delete.html', context)

类基

代码语言:javascript
复制
class DeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
    model = comment
    success_url = '/'

    def test_func(self):
        comment= self.get_object()
        if self.request.user == comment.user:
            return True
        return False

确认页的html

代码语言:javascript
复制
{% extends 'blog/base.html' %}
{% block content %}



<form>
    <p>are you sure you want to delete {{ comment }}</p>
    <input type="submit" value="confirm" >

</form>


{% endblock %}

models.py

代码语言:javascript
复制
class comment(models.Model):
    post=models.ForeignKey(Blog, on_delete=models.CASCADE)
    user=models.ForeignKey(User, on_delete=models.CASCADE)
    content=models.TextField(max_length=160)
    timestamp=models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return '{}-{}'.format(self.post.title,str(self.user.username))

    def get_absolute_url(self):
        return reverse('comment', kwargs={"pk": self.pk})
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-13 15:08:01

问题在于你的模板,而不是你的视图。您需要向表单中添加method="post"以执行POST请求,并添加{% csrf_token %}以防止CSRF错误。

代码语言:javascript
复制
<form method="post">
    {% csrf_token %}
    <p>are you sure you want to delete {{ comment }}</p>
    <input type="submit" value="confirm" >
</form>
票数 0
EN

Stack Overflow用户

发布于 2019-03-13 15:26:13

您需要在表单中添加一个post请求。Post请求需要令牌来保护免受跨站点请求伪造的攻击。通常,每个post请求都传递一个令牌。

代码语言:javascript
复制
<form method="POST">
    {% csrf_token %}
    <p>are you sure you want to delete {{ comment }}</p>
    <input type="submit" value="confirm" >
</form>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55145101

复制
相关文章

相似问题

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