Django:如果我一个接一个地发出POST/PUT请求,就会得到403(csrf令牌验证错误)

2024-05-21 22:35:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个页面,在该页面中,我呈现datatables以显示数据,并使用每行编辑和删除按钮,我还有一个全局按钮以创建新条目。“创建”按钮打开一个模式窗体,它是标准引导模型。 我使用相同的表单创建&;更新记录。因此如果刷新我的页面&;创建一个新条目,它可以工作,但在单击“编辑”按钮时不刷新,然后提交模式表单,它会给我此错误

CSRF verification failed. Request aborted.

所有这些操作都是使用AJAX请求执行的,因此我不会在每次请求后重新加载页面。我如何解决这个问题? 这是我的服务器端代码你想看一下

class CategoryView(AdminLoginRequiredMixin,View):
    
    def post(self, request):
        form = DownloadableCategoryForm(request.POST)

        if not form.is_valid():
            return JsonResponseBuilder.validation_error(form.errors)

        form.save()
       
        return JsonResponseBuilder.success('Category created succesfully...')

    # to update category
    def put(self, request):
        try:
            category = DownloadableCategory.objects.get(pk=request.POST.get('id'))
        except DownloadableCategory.DoesNotExist:
            return JsonResponseBuilder.error('Category not found!', HTTPStatus.NOT_FOUND.value)

        form = DownloadableCategoryForm(request.POST,instance=category)

        if not form.is_valid():
            return JsonResponseBuilder.validation_error(form.errors)

        form.save()
        
        return JsonResponseBuilder.success('Category updated succesfully...')

这是我用来创建/更新记录的JS代码

$.ajax({
                    url: "{% url 'admin:create_downloadable_category' %}",
                    method: id.length == 0 ? "POST" : "PUT",
                    data: new FormData(form[0]),
                    processData: false,
                    contentType: false,
                    beforeSend: function () {
                        $('.pre-loader-screen').fadeIn(200);
                    },
                    
                    error: function (err) {
                        console.log(err);
                        error = JSON.parse(err.responseText)

                        swal(
                            {
                                title: "Error!",
                                text: error['message'] || 'Internal Server Error!',
                                type: "error",
                                showCancelButton: true,
                                closeOnConfirm: true,
                            })

                    },
                    success: function (response) {
                        categoryModal.modal('hide')
                        $('.pre-loader-screen').fadeOut(200);
                        reloadDatatable()
                        toastr.success(response.message);
                    }
                });

编辑:我知道更新方法不起作用,即使我刷新页面&;尝试更新记录。它只给了我403个错误


Tags: form编辑returnrequest记录noterror页面
1条回答
网友
1楼 · 发布于 2024-05-21 22:35:53

您应该从服务器呈现模式内容。当用户单击模态来创建/更新对象时,您必须为更新的模态内容触发AJAX调用并更新模态内容

您应该创建一个AJAX视图,它为您提供一个模式内容

相关问题 更多 >