我正在尝试从react前端向django后端发出发布请求以登录用户,然后重定向到新页面。我遇到的问题是,即使请求到达服务器,并且在进行django重定向的时候也可以获取数据,但是重定向不会发生,它们是控制台中的输出,内容为“( '127.0.0.1',64989)”。我已经在网上做了一些有关此问题的研究,但是我仍然不知道如何解决它。但是,当我使用具有动作和方法类型的html表单元素时,一切工作正常。下面,我分享了我的代码。
反应前端
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后端
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')
以下方法有效,但不是我想要的
使用这种方法,我可以从输入字段中获取数据(此处未显示) 验证用户身份并正确重定向他们。但是,我不想 之所以使用此方法,是因为我想将所有错误消息传回进行调用的同一页面中已被调用的commitFunction()或处理任何其他数据。
<form method="POST" action={ENDPOINT}>
<input
type="hidden"
name="csrfmiddlewaretoken"
value={csrftoken}
/>
....