[英]Django csrf token when posting multiple forms
I am trying to create a page that includes multiple forms, and I want to build something like a "like button" so that I can "like" some posts in a page. 我正在尝试创建一个包含多个表单的页面,并且我想构建一个类似“喜欢按钮”的东西,以便我可以“喜欢”页面中的某些帖子。 I also want to put some restriction so that I can like every post, but can only like each post once
我也想施加一些限制,以便我可以喜欢每个帖子,但只能喜欢每个帖子一次
Now I encounter a problem that I can only "like" a post. 现在,我遇到一个只能“点赞”帖子的问题。 When I click another "like" to another post, csrf error would occur(CSRF verification failed. Request aborted.).
当我单击另一个帖子的“赞”时,会出现csrf错误(CSRF验证失败。请求中止。)。 I want to know how to like multiple posts in a page at the same time.
我想知道如何同时喜欢一个页面中的多个帖子。
Does it have something to do with how and where to put {% csrf_token %}? 与{%csrf_token%}的放置方式和位置有关吗? This article( How Will the Inclusion of Two Forms Affect my CSRF Token Use? ) says I should put {% csrf_token %} in every form, but it doesn't seem to work.
本文( 两种形式的包含如何影响CSRF令牌的使用? )说我应该在每种形式中都使用 {%csrf_token%},但似乎不起作用。
Here's my code: 这是我的代码:
models.py models.py
class Restaurant(models.Model):
name = models.CharField(max_length=20)
phone_number = models.CharField(max_length=15)
address = models.CharField(max_length=50, blank=True)
likes = models.DecimalField(max_digits=2,decimal_places=0, default=0)
views.py views.py
<!doctype html>
<html>
<head>
<title> Menu </title>
<meta charset='utf-8'>
</head>
<body>
<h2>餐廳列表</h2>
<table>
<tr>
<th>ID</th>
<th>NAME</th>
<th>PHONE</th>
<th>ADDRESS</th>
<th>LIKES</th>
<th>LIKE IT!</th>
</tr>
{% for r in restaurants %}
<tr>
<td> {{ r.id }} </td>
<td> {{ r.name }} </td>
<td> {{ r.phone_number }} </td>
<td> {{ r.address }} </td>
<td> {{ r.likes }} </td>
<td>
<form id={{ r.id }} action="" method="post">
{% csrf_token %}
<input type="hidden" name="ok" value="yes">
<input class="submit" type="submit" value="Upvote">
</form>
</td>
</tr>
{% endfor %}
</table>
</form>
</body>
</html>
views.py views.py
def list_restaurants(request):
restaurants = Restaurant.objects.all()
if request.method == "POST":
post = Restaurant.objects.get(id=request.POST['id'])
post.likes += 1
post.save()
return render_to_response('restaurants_list.html',locals())
else:
return render(request, 'restaurants_list.html',locals())
change 更改
return render_to_response('restaurants_list.html',locals())
to 至
return render(request, 'restaurants_list.html',locals())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.