我正在尝试在我的博客中创建一个删除按钮,但我不知道如何让用户只删除他自己的文章。
我在考虑这样的事情:
views.py
@login_required(login_url='/user')
def article_effacer(request, slug):
if request.user.is_authenticated():
user = request.user
article = get_object_or_404(Article, slug=slug)
if [check if article belongs to the user]:
article.delete()
else:
pass
else:
return HttpResponseForbidden()
template.html
<a class="delete" href='{% url "article.views.article_effacer" a.slug %}'>Effacer</a>
models.py
class Article(models.Model):
user = models.ForeignKey(User, default='1')
titre = models.CharField(max_length=100, unique=True)
summary = models.TextField(max_length=266)
contenu = models.TextField(max_length=2000)
slug = models.SlugField(max_length=40)
likes = models.ManyToManyField(User, related_name="likes")
def __str__(self):
return self.titre
[... unrelated code ...]
如果文章不属于他们,我也不想向其他用户显示 template.html 删除按钮,我该怎么办?
答案 0 :(得分:1)
我会尝试这样的事情:
@login_required(login_url='/user')
def article_effacer(request, slug):
if request.user.is_authenticated():
user = request.user
Article.objects.filter(slug=slug, user=user).delete()
else:
return HttpResponseForbidden()
然而,这里有一个明显的危险:我不记得SlugField在django中是否是独一无二的,但我不相信它是基于对文档的快速浏览。这意味着回收slug的用户在点击此视图时会删除所有带有该slug的文章。可能不是你想要的。 如果我正在实现这样的东西,我会研究这个并确保slugs在我的模型中是独一无二的。
答案 1 :(得分:1)
views.py
@login_required(login_url='/user')
def article_effacer(request, slug):
if request.user.is_authenticated():
user = request.user
article = get_object_or_404(Article, slug=slug)
if article.user == user:
article.delete()
else:
return HttpResponseForbidden()
templates.html
{% if a.user == user %}<a class="delete" href='{% url "article.views.article_effacer" a.slug %}'>Effacer</a>{% endif %}