为什么当用户想要创建评论时 django 会出错?

问题描述 投票:0回答:1

我正在使用 Django 开发一个博客网站。当未经授权的用户尝试提交评论时,我在 create_comment 视图中收到错误。

我的查看代码如下:

Python

def comment_create(请求, slug, pk): pk = str(pk)

try:
    post = Post.objects.get(pk=pk)
except Post.DoesNotExist:
    # handle the case where the post does not exist
    return JsonResponse({'success': False, 'errors': {'post': ['Post with this ID not found.']}})

if request.method == 'POST':
    form = CommentForm(request.POST)
    if form.is_valid():
        comment = form.save(commit=False)
        comment.post = post

        # check if the user has the necessary permissions to comment on the post
        if request.user.is_authenticated:
            if request.user.has_perm('blog.change_post'):
                comment.save()

                return JsonResponse({'success': True, 'comment': comment.to_dict()})
            else:
                return JsonResponse({'success': False, 'errors': {'post': ['You are not authorized to comment on this post.']}})
        else:
            return JsonResponse({'success': False, 'errors': {'user': ['Please log in.']}})

    else:
        return JsonResponse({'success': False, 'errors': form.errors})

else:
    return render(request, 'blog/post_details.html', {'post': post})

我的错误如下:

{"success": false, "errors": {"post": ["未找到此 ID 的帖子。"]}}

我认为问题在于我没有检查我的代码是否用户已登录。目前,即使用户未登录,也可以提交评论。

请帮我解决这个问题。

我可以添加的代码:

Python 如果不是 request.user.is_authenticated: return JsonResponse({'success': False, 'errors': {'user': ['请登录。']}})

python django ajax comments
1个回答
0
投票

您的 Django 应用程序返回“未找到此 ID 的帖子”错误。当视图尝试获取具有特定 ID 的帖子,但数据库中不存在该帖子时,通常会发生这种情况。

以下是一些常见场景和建议,可帮助您排查和处理这种情况:

URL 或 ID 不正确:

仔细检查您传递到视图的 URL 参数。确保您在 URL 中使用的 pk(主键)对应于有效的帖子 ID。 如果您使用 slugs,请确保 URL 中的 slug 和 pk 值格式正确。

帖子已删除或不存在:

验证您尝试访问的帖子尚未被删除。如果有,您可能希望通过通知用户或将他们重定向到相关页面来优雅地处理删除。

数据库完整性:

检查数据库的完整性。该帖子可能未成功创建或被意外删除。您可以直接检查数据库或使用 Django admin 浏览现有帖子。

© www.soinside.com 2019 - 2024. All rights reserved.