Я схожу с ума от, казалось бы, очень простой задачи: выполнить почтовый запрос к 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.
Что я делаю не так? Я схожу с ума от этого ..