我是django的绝对初学者(以及一般的编程),我已经尝试了django民意调查教程并且一切顺利,但是我试图让最小的投票按钮起作用。基本上我已经设置了一个包含两列的数据库,我的models.py
看起来像这样
from django.db import models
class Imgurl(models.Model):
urlvar = models.URLField(max_length=200)# a URL linking to an image
urlvote = models.IntegerField(default=0)# my intended vote count
def __unicode__(self):
return self.urlvar
我已经制作了一个输入框,我可以在其中复制并粘贴图像网址,然后该图像显示在单独的页面上(这样可以正常工作)。我想要的是在每个显示的图像旁边有一个投票按钮,用户可以点击该按钮(我正在尝试使用提交按钮),并且数据库中的投票数将增加(不会重定向到新页面)或任何花哨的东西)。
我认为这是一个微不足道的问题,我正在尝试学习POST
的基础知识和django中的数据库处理(另外,我已经阅读了djangobook中的相关章节...也许我只是一个有点慢?)
我的观点看起来像这样
def urlvotes(request):
if request.method=='POST':
if 'voteup' in request.POST:
v=Imgurl(forloop.counter)
v.urlvote +=1
else:
pass
votetotal=v.urlvote # attempt to give the template some kind of context
return render_to_response('display.html', {'votetotal':votetotal}, context_instance=RequestContext(request))
我的模板如下所示:
{% extends "base.html" %}
{% block head %}Image display{% endblock %}
{% block content1 %}
<a href="http://127.0.0.1:8000/home/">Home</a>
{% if links %}
<ul>
{% for link in links %}
<li><img src="{{ link }}"></li>
<li><form action="{% url urlvotes %}" method="post">
{% csrf_token %}
<input type="submit" name="voteup" value='vote'/></p>
<p>{{votetotal}}</p>
</form></li>
{% endfor %}
</ul>
{% else %}
<p>No uploads.</p>
{% endif %}
{% endblock %}
当我运行它时,我得到一个csrf验证失败错误
非常感谢任何帮助
答案 0 :(得分:0)
尝试将@csrf_protect添加到您的视图
@csrf_protect
def urlvotes(request):
if request.method=='POST':
if 'voteup' in request.POST:
v=Imgurl(forloop.counter)
v.urlvote +=1
else:
pass
votetotal=v.urlvote # attempt to give the template some kind of context
return render_to_response('display.html', {'votetotal':votetotal}, context_instance=RequestContext(request))