在刷新页面后,如何防止数据被添加额外的时间?

时间:2012-06-25 00:18:56

标签: django templates view model refresh

我有以下视图,允许用户为给定产品添加评论。用户提交表单后,它会将数据添加到数据库,然后转到/view_reviews.html。但是,当我刷新页面时,它会再次添加相同的评论。即使用户碰巧刷新页面,我如何确保仅添加一次评论?

def add_review(request, product_id):
    if request.method == 'POST':
        form = ReviewForm(request.POST)
        if form.is_valid():
            form.save()
            product = get_object_or_404(Product, pk=product_id)
            reviews = Review.objects.filter(product_id=product_id)
            return render(request,'reserve/templates/view_reviews.html',{'form': form, 'product':product, 'reviews':reviews})
    else:
        form = ReviewForm()
    variables = RequestContext(request, {'form': form})
    return render_to_response('reserve/templates/create_review.html', variables)

1 个答案:

答案 0 :(得分:3)

您应该只修改POST中的数据,并且当请求成功时,您将重定向到该页面。这样,如果你重新加载,你只是重新加载页面本身,而不是改变数据的POST。

因此,您应该return render(...)而不是return HttpReponseRedirect(...)

这也有一个优点,就是您不必复制代码。在您的示例中form.save()之后,您有三行实际上只是您已经拥有的其他地方的视图。