【发布时间】:2024-01-11 20:50:01
【问题描述】:
我在 django 1.6 中编写了这个信号接收器,旨在阻止已发布的包含坏词的 cmets 被保存数据库:
@receiver(pre_save, sender= Comment)
def spam_filter(sender, **kwargs):
cmnt = kwargs['instance']
my_expression = '|'.join(re.escape(word) for word in BAD_WORDS)
if re.search(my_expression, cmnt.body, flags=re.IGNORECASE):
#pervent the comment from being saved
else:
pass
我想知道如何告诉 django 代替“保存#pervent 评论”而不保存“坏”评论实例?
附:观点:
@login_required
def add_comment(request, post_id):
p= Blog.objects.get(id=post_id)
post_slug = p.slug
cform = CommentForm(request.POST)
if cform.is_valid():
c = cform.save(commit = False)
c.created = timezone.now()
c.post = p
c.author = request.user
c.save()
args=post_slug
messages.info(request, "comment was added")
return HttpResponseRedirect(reverse("Blog.views.post_withslug",
args=[post_slug]))
【问题讨论】:
-
为什么在清理表单域时选择使用信号而不是编写这个逻辑?
-
@ScottWoodall 我是 django 新手,你提出了一个很好的问题。使用信号而不是集成到视图中是否有很多开销?如果是这样,我会修改代码。
标签: django django-signals