我已经写在Django 1.6这个信号接收器,旨在从被保存的数据库阻止包含脏话发表的评论:如何告诉django不要在数据库中保存实例?
@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评论得救”不保存'坏'评论实例?
P.S.该教职员:
@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的新手,你提出了一个很好的问题。使用信号代替集成到视图中有很多开销吗?如果是这样,我会修改代码。 – supermario