ax ios .post to Django ConnectionResetError: [Errno 54] Соединение сброшено узлом - PullRequest
0 голосов
/ 05 апреля 2020

Я схожу с ума от, казалось бы, очень простой задачи: выполнить почтовый запрос к django серверу с приложением React.

почтовый запрос (в React):

static searchProducts(query) {
    console.log(queryString.stringify({'search_key':query}))

    const requestBody = {
        search_key: query
      }

    const config = {
        crossDomain: true,
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded',
          'Access-Control-Allow-Origin': '*'
        }
      }

    return axios.post(API_ROUTE+'/search/', 
        queryString.stringify(requestBody),
        config)
    .then(function (response) {
        console.log(response)
    })
    .catch(function (error) {
        console.log(error);
    });
}

функция в Django бэкэнд:

@csrf_exempt
def search(request):
if request.POST['search_key']:
    req=request.POST
else:
    req=json.loads(request.body)
if req['search_key']:
    if (req['search_key'][-1]) == " ":
        key=req['search_key'][:-1]
    else:
        key=req['search_key']
vector = SearchVector('name','brand','family','sub_family',config='italian')
query = SearchQuery(key,config='italian')
keys_array = key.split(" ")
print(key)
# rs = Product.objects.annotate(search=vector).filter(search=key)
# rs = Product.objects.annotate(search=vector).filter(search__icontains__in=keys_array)

q = Q()
for word in keys_array:
    q |= Q(search__icontains = word)
q |= Q(search=key)
rs= Product.objects.annotate(search=vector).filter(q)

rs=rs.annotate(rank=SearchRank(vector, query)).order_by('-rank').values()
print(rs)
return JsonResponse({'response':list(rs)})

Обратите внимание, что бэкэнд правильно печатает rs, но затем выдает следующую ошибку:

ConnectionResetError: [Errno 54] Connection reset by peer

В FE ошибка это:

Access to XMLHttpRequest at 'http://127.0.0.1:8000/api/search/' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Что я делаю не так? Я схожу с ума от этого ..

...