Ajax 重定向在未上传文件时中断

Ajax redirect broken when not uploading a file

提问人:dawn bringer 提问时间:10/24/2023 最后编辑:Ivan Starostindawn bringer 更新时间:10/24/2023 访问量:23

问:

我有一个小错误,当我不上传文件时,它总是会重定向到 URL,但是当我上传文件时,它运行良好,JS 成功地从 Django 捕获了用户的数据。

我尝试更改功能和重定向,但不幸的是,这可能没有那么简单......

无论如何,这是我到目前为止编写的代码:

type: 'POST',
headers: { "X-CSRFToken": token },
url: window.location.href,
data: examData,
processData: false,
contentType: false,
success: function (data) {
    if (data.user_groups.includes('rasp') || data.user_groups.includes('canyon')) {
            window.location.href = "{% url 'red' %}";
    } else {
            window.location.href = "{% url 'blue' %}";
    }
}

上面的代码根据给定的数据检查成功的 Ajax 函数,以重定向到红色/或蓝色/,具体取决于用户是否具有这些组。如前所述,当用户尚未上传文件时,它可以完美运行。

views.py

for f in request.FILES.getlist('file'):
    handle_uploaded_file(request, f, task=db_item)
    messages.add_message(request, messages.SUCCESS, 'Success! Area added.')
    if request.user.groups.filter(name=rasp).exists() or request.user.groups.filter(name=canyon).exists():              
        user_groups = list(request.user.groups.values_list('name', flat=True))
        data = {'user_groups': user_groups}
    return JsonResponse(data)
else:
    if request.user.groups.filter(name=rasp).exists() or request.user.groups.filter(name=canyon.exists():              
        user_groups = list(request.user.groups.values_list('name', flat=True))
        data = {'user_groups': user_groups}
    return HttpResponseRedirect(reverse('blue'))

这是 views.py 中的 django 函数,当在客户端单击提交并上传文件时,AJAX 会根据用户数据重定向。

编辑:我的目标是让它在没有上传文件时进行检查,所以基本上相同的功能,但当没有上传文件时。

目前,当没有上传文件时,它总是重定向到 blue/。

HTML Django AJAX

评论


答:

0赞 Kiarash Gh 10/24/2023 #1

为了在未上传文件时具有相同的功能,应包含文件中未上传文件时的逻辑,因此应如下所示:views.pyviews.py

# change "your_view_function" to the actual name of your view function
def your_view_function(request):
    if request.method == 'POST':
        if 'file' in request.FILES:  # Check if files are uploaded
            for f in request.FILES.getlist('file'):
                handle_uploaded_file(request, f, task=db_item)
            messages.add_message(request, messages.SUCCESS, 'Success! Area added.')
            if request.user.groups.filter(name='rasp').exists() or request.user.groups.filter(name='canyon').exists():
                user_groups = list(request.user.groups.values_list('name', flat=True))
                data = {'user_groups': user_groups}
                return JsonResponse(data)
            else:
                user_groups = list(request.user.groups.values_list('name', flat=True))
                data = {'user_groups': user_groups}
                return HttpResponseRedirect(reverse('blue'))
        else:
            if request.user.groups.filter(name='rasp').exists() or request.user.groups.filter(name='canyon').exists():
                user_groups = list(request.user.groups.values_list('name', flat=True))
                data = {'user_groups': user_groups}
                return JsonResponse(data)
            else:
                return HttpResponseRedirect(reverse('blue'))
    else:
        # your logic here for handling GET request goes here
        pass

此代码检查请求中是否有上传的文件,如果有,它会相应地处理并基于用户的组进行重定向,如果没有上传的文件,它会直接检查用户的组并根据组执行重定向。

我希望这对你有所帮助。