Python 发布多个表单时使用Django csrf令牌
我正在尝试创建一个包含多个表单的页面,我想构建一个类似“喜欢”按钮的东西,这样我就可以“喜欢”页面中的一些帖子。我还想设置一些限制,这样我可以喜欢每个帖子,但只能喜欢每个帖子一次 现在我遇到了一个问题,我只能“喜欢”一个帖子。当我点击另一个“喜欢”到另一个帖子时,会发生csrf错误(csrf验证失败。请求中止)。我想知道如何在一个页面上同时发布多篇文章 它是否与如何以及在何处放置{%csrf_token%}有关?这篇文章()说我应该把{%csrf_token%}放在每种形式中,但它似乎不起作用 这是我的密码: 型号.pyPython 发布多个表单时使用Django csrf令牌,python,django,django-csrf,Python,Django,Django Csrf,我正在尝试创建一个包含多个表单的页面,我想构建一个类似“喜欢”按钮的东西,这样我就可以“喜欢”页面中的一些帖子。我还想设置一些限制,这样我可以喜欢每个帖子,但只能喜欢每个帖子一次 现在我遇到了一个问题,我只能“喜欢”一个帖子。当我点击另一个“喜欢”到另一个帖子时,会发生csrf错误(csrf验证失败。请求中止)。我想知道如何在一个页面上同时发布多篇文章 它是否与如何以及在何处放置{%csrf_token%}有关?这篇文章()说我应该把{%csrf_token%}放在每种形式中,但它似乎不起作用
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)
<!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>
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())
视图.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)
<!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>
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())
改变
return render_to_response('restaurants_list.html',locals())
到
改变
return render_to_response('restaurants_list.html',locals())
到
谢谢你的建议,但是如果我想设置一些限制,使我可以喜欢每一篇文章,但只能喜欢每一篇文章一次呢?这是另一种逻辑。你必须保存哪个用户喜欢哪个帖子。谢谢你的建议,但是如果我想设置一些限制,这样我可以喜欢每一篇文章,但只能喜欢每一篇文章一次呢?这是另一种逻辑。你必须保存哪个用户喜欢哪个帖子。你必须建造它