Failed To Fetch error with Django Application

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

在 Django 应用程序上工作并从我的 JS 代码间歇性地运行到

failed to fetch
错误。

您可以看到下面的网络响应 - 服务器的错误是间歇性的(当前在 localhost:8000 上)

我的 django 服务器日志没有显示任何内容 - 所以“连接被拒绝”和“空响应”令人困惑。

在我使用的 JS 方面

fetch(data.getAttribute('action'), {
            method: data.getAttribute('method'),
            body: new FormData(data),
            headers:{ "X-CSRFToken": csrf_token, "X-Requested-With": "XMLHttpRequest"},
          }).then(res=>res.json())
            .then(function (data) {
                console.log(data)
                document.getElementById('create-submit-button').style.border = "2px solid #ebebeb" 

              if(data.status == 'success'){
                //happy path will be to add photos on good response
                console.log('happy path')
              } else {
                Swal.fire({
                    icon: 'error',
                    title: 'there was an issue with your request',
                    text: data.message,
                  })
              } 
            })
            .catch(error => console.log('Error: ', error))
        }

我的django视图如下:

@login_required(login_url='login')
def create(request):

    if request.method == "POST":
        if request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest' and request.user.is_authenticated:
            print(request.POST)
            form = SpinForm(request.POST)
            if form.is_valid():
                user = request.user
                spin = Spin()
                spin.prompt = form.cleaned_data['prompt']
                spin.user = user
                spin.orientation = form.cleaned_data['orientation']
                # save spin to get many to many relationship
                spin.save()
                spin.themes.add(*form.cleaned_data['themes'])
                # update users total spins
                user.current_spins += 1
                user.save()

                # themes = request.POST.getlist('theme')
                computed_prompt = ''

                if len(spin.themes.all()) > 0:
                    for theme in spin.themes.all():
                        computed_prompt += ' ' + theme.prompt_text

                # save spin again after attaching themes + computed prompt
                spin.computed_prompt = computed_prompt
                spin.final_prompt = spin.prompt + ' ' + computed_prompt
                spin.save()

                try:
                    ThirdPartyApi.spin(request.user, spin)
                except Exception as e:
                    print('%s' % type(e))
                    print(e)
                    return JsonResponse({
                        'status': 'failed',
                        'message': 'stable-d shit'
                    })

                # stable d api shit right here
                return JsonResponse({
                    'status': 'success',
                    'spin': 'win'
                })
            else:
                print(form.errors.as_data())
                return JsonResponse({
                    'status': 'failed',
                    'message': str(form.errors.as_data())
                })
        else:
            return JsonResponse({
                'status': 'failed',
                'message': 'non ajax or user not logged in',
            })

    else:
        spin = SpinForm()
        themes = Theme.objects.all().order_by('created_at')
        context = {
            'form': spin,
            'themes': themes
        }
    return render(request, 'templates/create/create.html', context)

我确实调用了一个

ThirdPartyApi
,它使用 GRPC 并需要一些时间来计算(AI api)。话虽这么说,我真的对它工作/不工作的间歇性感到恼火。非常感谢解决无法获取问题的任何提示。

javascript django asynchronous fetch
1个回答
0
投票

对于遇到此问题的任何其他人 - 我遇到了 django 开发服务器的限制。一旦我切换到 nginx + gunicorn,问题就完全消失了。如果 django 开发人员在它爆炸时能吐出一些东西,那就太好了。原来它也是单线程的,我正在做一堆可能有一些清理的图像处理,所以线程保持锁定。使用 nginx + 一个 w/asgi 服务器!

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