Я использую Flask для создания метода POST для регистрации нового пользователя в моей базе данных MySQL.Я попытался создать метод Axios для отправки запроса POST из моего приложения React JS.Я тестировал с Почтальоном, и я отправляю его, используя application / x-www-form-urlencoded.Регистрация работает в Почтальоне, но данные отображаются как ImmutableMultiDict ([]) .
Код колбы:
@app.route('/registerUser', methods=['POST'])
def registerUser():
data = request.form
if len(data) is 0:
return 'Request was empty!'
username = data['username']
password = data['password']
email = data['email']
user = User(username=username,
password=password,
email=email)
db.session.add(user)
db.session.commit()
return 'Registration success!'
return 'Registration failed!'
Код реагирования:
class Signup extends Component {
constructor(props){
super(props);
this.state = {
username: '',
password: '',
email: ''
}
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
this.clearInputs = this.clearInputs.bind(this);
}
handleChange(event){
event.preventDefault();
this.setState({[event.target.name]: event.target.value});
}
handleSubmit(event){
event.preventDefault();
const config = {
headers: { 'content-type': 'application/x-www-form-urlencoded' }
}
axios.post(`http://localhost:5000/registerUser`,
this.state, config)
.then(res => {
alert(res.data);
})
.catch((err) => {
alert(err);
});
}
render(){
return (
<div className='signup'>
<form onSubmit={this.handleSubmit}>
<label>
Username
<input type='text' name='username'
value={this.state.username}
onChange={this.handleChange}/><br/>
</label>
<label>
Password
<input type='password' name='password'
value={this.state.password}
onChange={this.handleChange}/><br/>
</label>
<label>
Email
<input type='text' name='email'
value={this.state.email}
onChange={this.handleChange}/><br/>
</label>
<input type='submit' value='Submit' /><br/>
</form>
</div>
);
}
}
export default Signup;
Почему данные неправильно отправляются из Axios?Я использую CORS во фляге, и Почтальон и Аксиос должны отправлять одни и те же данные формы.
РЕДАКТИРОВАТЬ: я изменил запрос POST для использования request.form Тем не менее, Почтальон работает, ноАксиос до сих пор нет.От Почтальона:
ImmutableMultiDict([('username', 'person'), ('password', 'Password1'), ('email', 'example@example.com')])
От Аксиоса: ImmutableMultiDict([('{"username":"someone","password":"Password1","email":"email@example.com"}', '')])
Неправильно ли сконфигурирован Аксиос?