Python 限制每个用户的投票django
我有这个代码,可以让你投票给一篇文章,现在一个用户可以无限次投票,我想这样做,当人们第一次点击按钮时,它会得到一个值,然后减少一,依此类推 下面是article.html:Python 限制每个用户的投票django,python,django,ajax,Python,Django,Ajax,我有这个代码,可以让你投票给一篇文章,现在一个用户可以无限次投票,我想这样做,当人们第一次点击按钮时,它会得到一个值,然后减少一,依此类推 下面是article.html: <button id="vote">vote</button> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> <script&
<button id="vote">vote</button>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script>
$("#vote").click(function (e) {
e.preventDefault()
var upvotes = $("#total_votes").html()
var updatedUpVotes = parseInt(upvotes) + 1
$("#total_votes").html(updatedUpVotes)
$.ajax({
url: 'vote/',
method: "GET",
data: {},
success: function (data) {
console.log(data)
},
error: function (error) {
console.log(error)
}
})
})
</script>
您需要有一个单独的模型来存储用户附带的投票信息。否则你就不知道是谁投了那篇文章的票。您可以尝试以下方法:
# Model
class Vote(models.Model):
user = models.ForeignKey(User,on_delete=models.DO_NOTHING)
article = models.ForeignKey(Article,on_delete=models.DO_NOTHING)
# View
from django.contrib.auth.decorators import login_required
@login_required
def vote(request, article_id):
article = get_object_or_404(Article, pk=article_id)
vote, created = Vote.objects.get_or_create(article=article, user=request.user)
if created:
return JsonResponse(data = {"vote": "Voted! Thank you for the vote."})
return JsonResponse(data = {"vote": "You already voted for this article."})
FYI:尽管GET
请求会起作用,但我建议使用POST
方法,因为根据:
使用GET的请求应该只检索数据
但很明显,这种方法会在数据库中发生变化。您需要一个单独的模型来存储用户附带的投票信息。否则你就不知道是谁投了那篇文章的票。您可以尝试以下方法:
# Model
class Vote(models.Model):
user = models.ForeignKey(User,on_delete=models.DO_NOTHING)
article = models.ForeignKey(Article,on_delete=models.DO_NOTHING)
# View
from django.contrib.auth.decorators import login_required
@login_required
def vote(request, article_id):
article = get_object_or_404(Article, pk=article_id)
vote, created = Vote.objects.get_or_create(article=article, user=request.user)
if created:
return JsonResponse(data = {"vote": "Voted! Thank you for the vote."})
return JsonResponse(data = {"vote": "You already voted for this article."})
FYI:尽管GET
请求会起作用,但我建议使用POST
方法,因为根据:
使用GET的请求应该只检索数据
但很明显,这种方法将在数据库中改变。创建一个单独的模型,其中包含文章id和用户id。单击“相似”按钮时,检查该用户和文章是否存在数据。如果存在,则将投票数减少1,否则增加其值。创建一个单独的模型,该模型将包含文章id和用户id。单击“相似”按钮时,检查该用户和文章是否存在数据。如果存在,则将投票数减少1,否则增加其值。我得到此错误类型错误:\u init\u()缺少1个必需的位置参数:“on\u delete”我得到此错误类型错误:\u init\u()缺少1个必需的位置参数:“on\u delete”