提问人:dawn bringer 提问时间:10/24/2023 最后编辑:Ivan Starostindawn bringer 更新时间:10/24/2023 访问量:23
Ajax 重定向在未上传文件时中断
Ajax redirect broken when not uploading a file
问:
我有一个小错误,当我不上传文件时,它总是会重定向到 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/。
答:
0赞
Kiarash Gh
10/24/2023
#1
为了在未上传文件时具有相同的功能,应包含文件中未上传文件时的逻辑,因此应如下所示:views.py
views.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
此代码检查请求中是否有上传的文件,如果有,它会相应地处理并基于用户的组进行重定向,如果没有上传的文件,它会直接检查用户的组并根据组执行重定向。
我希望这对你有所帮助。
评论