Я пытаюсь отправить запрос с сайта реакции на сервер Django, чтобы войти в систему и перенаправить на новую страницу. У меня проблема в том, что, несмотря на то, что запрос достигает сервера, и я могу получить данные, когда приходит время для перенаправления django, перенаправление не происходит, и они выводятся в консоли с сообщением «Сломанный канал от ( «127.0.0.1», 64989) ». Я провел некоторые исследования в Интернете по этому вопросу, но я до сих пор не могу понять, как это исправить. Тем не менее, все работает нормально, когда я использую HTML-элемент формы с типом действия и метода. Ниже я поделился своим кодом.
React Frontend
handleSubmit = () => {
let csrfToken = Cookies.get('csrftoken')
let endpoint = this.state.isLoggingIn ? LOGIN_ENDPOINT : REGISTER_ENDPOINT;
axios({
url: endpoint,
method: "POST",
data: {
username: this.state.username,
password: this.state.password,
displayName: this.state.displayName,
},
headers: {"X-CSRFToken": csrfToken},
responseType: "json",
}).then(function (response) {
console.log(response);
}).catch(function (error) {
console.log(error);
});
}
Django Backend
def login_view(request):
if request.method == 'POST':
#username = request.POST.get('username') <= I use this and below, to get data sent via a form with an action and method set.
#password = request.POST.get('password')
body_unicode = request.body.decode('utf-8')
data = simplejson.loads(body_unicode)
username = data['username']
password = data['password']
user = authenticate(username=username, password=password)
print user
if user is not None and user.is_active:
login(request, user)
return redirect('chat_app:chat')
else:
return JsonResponse({'message': 'Check you username or password'})
else:
return render(request, 'frontend/chat_app/home.html')
Следующие работы, но это не то, что я хочу
С помощью этого метода я могу получить данные из полей ввода (здесь не показано)
аутентифицируйте пользователя и перенаправьте его правильно. Однако я не хочу
используйте этот метод, потому что я хочу передать все сообщения об ошибках в вызываемую submitFunction () или обработать любые другие данные на той же странице, где был выполнен вызов.
<form method="POST" action={ENDPOINT}>
<input
type="hidden"
name="csrfmiddlewaretoken"
value={csrftoken}
/>
....