在DRF服务器上,授权API工作正常(我使用jwt)。但是当我尝试从 React 中执行相同操作时,我收到消息 Cannot POST /login。服务器上没有关于post请求的信息,即问题出在前端。
const Login = () => {
const [username, setUsername] = useState('');
const [password, setPassword] = useState('');
const [error, setError] = useState('');
const loginUser = async () => {
try {
const response = await axios.post('http://127.0.0.1:8000/api/v1/token/', { username, password });
localStorage.setItem('access', response.data.access);
localStorage.setItem('refresh', response.data.refresh);
setError('');
} catch (err) {
setError(err.response.data.message);
}
};
return (
<div>
<form class="form_auth_style" method="post">
<div class="form-group">
<input class="form-control item" type="text" name="username" placeholder="Логин" required />
</div>
<div class="form-group">
<input class="form-control item" type="password" name="password" placeholder="Пароль" required />
</div>
<div class="form-group">
<button class="btn btn-primary btn-block create-account" type="submit">Вход в аккаунт</button>
</div>
</form>
</div>
);
};
export default Login;
浏览器有一个默认的表单行为,它尝试将请求发送到指定的地址。
如果未指定操作,则它会发送不是当前页面的数据,因此您会在路径上看到额外的请求
/login
。为了防止浏览器出现这种行为,通常会禁用此行为。好吧,或者如果数据是通过代码处理的,就不要使用表单标签。
现在您已经有了一个干净的布局,并且代码不会以任何方式与其交互。如果这是点击按钮,则必须对其进行处理。
字段也是一样,你需要明确指出将数据放在哪里,所以表单数据显示为空。