Django 中的 AJAX 注释

ajax comment in django

提问人:Elyas Shavikloo 提问时间:11/6/2023 更新时间:11/6/2023 访问量:51

问:

我正在尝试在我的 Django 应用程序中对帖子发表评论。我有一个评论的工作表单,但是当我提交表单时,我收到一条错误消息。

错误消息为:

{“response”: “禁止访问”} 我已经检查了我的代码,我确定表单是有效的,并且请求被发送到正确的 URL。我还检查了尝试创建评论的用户的权限,他们已登录并具有适当的权限。

我不确定是什么原因导致了错误。谁能帮我?

法典:

class CommentForm(forms.ModelForm):
    author = forms.CharField(required=True, error_messages={'required': 'لطفاً نام خود را وارد کنید.'})
    body = forms.CharField(required=True, error_messages={'required': 'لطفاً نظر خود را وارد کنید.'})

    class Meta:
        model = Comment
        fields = ('author', 'body', 'post')

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.cleaned_data = {}

    def clean_author(self):
        author = self.cleaned_data.get('author', 'نام کاربری ناشناس')
        return author

    def clean_body(self):
        body = self.cleaned_data.get('body')
        return body

function comment(slug, id) {
    var comment = document.getElementById("comment").value;

    $.post(`/posts/post/${slug}/comment/create/${id}`, {
    comment: comment
    }).then(response => {
        if (response['response'] === 'created') {
            var count = document.getElementById("count");
            count.innerText = Number(count.innerText) + 1;

            document.getElementById("comment").value = "";
        } else {
            var errors = response['errors'];
            for (var key in errors) {
                var error = errors[key];
                document.getElementById("comment").classList.add("is-invalid");
                document.getElementById("comment").setAttribute("aria-invalid", "true");
                document.getElementById("comment").setCustomValidity(error);
            }
        }
    });
}

环境:

Django 4.2.6 蟒蛇 3.11 重现步骤:

转到帖子页面。 点击“发表评论”按钮。 在注释字段中输入注释。 点击“提交”按钮。 预期行为:

评论应创建并显示在帖子页面上。

实际行为:

显示错误消息 “{”response“: ”forbidden“}”。

附加信息:

我已经检查了尝试创建评论的用户的权限,他们已登录并具有适当的权限。 我还检查了表格和请求,它们似乎是有效的。your text

我不确定是什么原因导致了错误。谁能帮我?

我正在尝试在我的 Django 应用程序中对帖子发表评论。我有一个评论的工作表单,但是当我提交表单时,我收到一条错误消息。

Python Django Ajax 网友点评

评论

0赞 Niko 11/7/2023
据我所知,您的请求标头中缺少 csrftoken。请分享,也许这样我们就可以很容易地复制它。models.pyviews.pyurls.py

答:

0赞 Mohamed ElKalioby 11/6/2023 #1

您在帖子中缺少 csrfmiddlewaretoken

$.post(`/posts/post/${slug}/comment/create/${id}`, {
comment: comment, csrfmiddlewaretoken: "{{csrf_token}}"
}).then(response => {

})

评论

0赞 Elyas Shavikloo 11/6/2023
我更改了该代码,但没有成功
0赞 Mohamed ElKalioby 11/6/2023
请在问题中分享您的观点