0
我是Django的新手,并且在this tutorial后面添加一个Like按钮到模块。我有这样的看法:Django CSRF令牌丢失或FormView不正确
class VoteFormView(FormView):
form_class = VoteForm
def form_valid(self, form):
pic = get_object_or_404(UserPic, pk=form.data["pic"])
user = self.request.user
prev_votes = Vote.objects.filter(voter=user, pic=pic)
has_voted = (prev_votes.count() > 0)
if not has_voted:
# add vote
Vote.objects.create(voter=user, pic=pic)
print("voted")
else:
# delete vote
prev_votes[0].delete()
print("unvoted")
return render_to_response('userpics/photo.html',
{'pic':pic})
def form_invalid(self, form):
print("invalid")
return render_to_response('userpics/photo.html',
{'pic':pic})
在photo.html我:
{% if pic %}
<form method="post" action="/photo/vote/" class="vote_form">
<li> [{{ pic.votes }}]
{% csrf_token %}
<input type="hidden" id="id_pic" name="pic" class="hidden_id" value="{{ pic.pk }}" />
<input type="hidden" id="id_voter" name="voter" class="hidden_id" value="{{ user.pk }}" />
<button>Like</button>
</form>
<img class="pic" src="/static/assets/{{pic}}" />
{% endif %}
当我点击第二次照片页面上的链接一样,我得到这个错误:
Forbidden (403)
CSRF verification failed. Request aborted.
我想:
return render_to_response('userpics/photo.html',
{'pic':pic,},
context_instance=RequestContext(request))
但由于此视图没有“请求”对象,因此上述语句也会导致错误。所以我不确定如何为这个视图实现csrf并感谢你的帮助。
感谢的人。这解决了这个问题。 – hbp