Python 使用ajax的类Django函数
首先:我已经检查了所有相关的答案和问题。。。。他们没有帮助我 因此,我尝试创建基于ajax的like button,其中包含多个用户和多个对象或帖子。我尝试了很多次,但都没有成功,但我有了基础 models.py:Python 使用ajax的类Django函数,python,ajax,django,django-views,endpoint,Python,Ajax,Django,Django Views,Endpoint,首先:我已经检查了所有相关的答案和问题。。。。他们没有帮助我 因此,我尝试创建基于ajax的like button,其中包含多个用户和多个对象或帖子。我尝试了很多次,但都没有成功,但我有了基础 models.py: class BlogPost(models.Model): #some fields class Like (models.Model): user = models.ForeignKey(User) post = models.ForeignKey(Blo
class BlogPost(models.Model):
#some fields
class Like (models.Model):
user = models.ForeignKey(User)
post = models.ForeignKey(BlogPost)
views.py
from .models import Like
def PostLikeToggle(request):
#here i want to capture the request check if the user liked the post or
# no by sending user.username and post.title to the endpoint like.html
#and then update his status
return render(request, 'like.html')
url.py
from plateform import views as plateform
urlpatterns = [
#other urls
url(r'^like/', plateform.PostLikeToggle, name='PostLikeToggle'),]
like.html
{% if liked == 'false' %}
false
{% elif liked == 'true' %}
true
{% endif %}
blogpost.html
#ajax
$('.thumb').click(function () {
$.ajax({
type: 'POST',
url: '/like/',
data: {
'csrfmiddlewaretoken': $('input[name=csrfmiddlewaretoken]').val(),
},
success: LikePost,
dataType: 'html'
});
function LikePost(data, jqXHR) {
console.log(data)
}
});
更新
我想弄明白,所以我加了一些东西
型号:
class BlogPost(models.Model):
#some fields
liked = models.ManyToManyField(User, related_name='PostLikeToggle')
#REMOVED class Like (models.Model)
观点:
def PostLikeToggle(request):
user = request.user
if request.method == 'POST':
post_id = request.POST['post_id']
post = get_object_or_404(posts, id=post_id)
_liked = user in post.liked.all()
if _liked :
post.liked.remove(user)
else:
post.liked.add(user)
return JsonResponse({'liked':_liked})
那么我走对了吗?好的,我会把我的答案贴出来。。。。这很简单,但我有点小气 在模型文件中,我添加了许多与用户相关的字段(许多用户+许多帖子) 在视图中,我创建了一个视图,它将接受来自blogpost视图的请求,并检查用户是否已经喜欢这篇文章(如果喜欢,将用户添加到喜欢的字段中,如果喜欢,返回true,则删除它…) 此视图与我们将在其中获得响应的url相关联:
url(r'^like/', plateform.PostLikeToggle, name='PostLikeToggle')
在您的博客文章模板中,您需要链接Jquery并添加此Ajax功能
(别忘了用您自己的变量类url对其进行自定义…)
这一次有效,如果有任何例外或你有更好的方式只是张贴它,我会标记它
注意:您必须检查用户是否在模板中经过身份验证,以隐藏like按钮或重定向他登录……您需要在请求中添加额外数据:您想要的对象。您应该发布不起作用的代码,以便我们可以帮助您调试它,现在看来,你只是想让其他人为你做完整的实现。你需要想出一种方法,在帖子取消链接后软删除like,或者删除like本身的行。另外,作为一个提示,你需要两件事来识别一个相似的唯一的-UserId和PostIddo我需要在blogpost中创建一个外部字段并删除相似的模型,因此如果用户单击按钮,我添加他,请查看我的更新
def PostLikeToggle(request):
user = request.user
if request.method == 'POST':
post_id = request.POST['post_id']
post = get_object_or_404(posts, id=post_id)
_liked = user in post.liked.all()
if _liked :
post.liked.remove(user)
else:
post.liked.add(user)
return JsonResponse({'liked':_liked})
url(r'^like/', plateform.PostLikeToggle, name='PostLikeToggle')
$('.thumb').click(function () {
$.ajax({
type: 'POST',
url: {% url 'PostLikeToggle' %},
data: {
'post_id': {{ post_slug.id }},
'csrfmiddlewaretoken': $('input[name=csrfmiddlewaretoken]').val(),
},
success: LikePost,
dataType: 'html'
});
function LikePost(data, jqXHR) {
var data = $.parseJSON(data)
if (data['liked']) {
$('.thumb').removeClass("fas fa-thumbs-up").addClass('far fa-thumbs-up')
}
else
{
$('.thumb').removeClass("far fa-thumbs-up").addClass('fas fa-thumbs-up')
}
}
});