Я использую очень простое приложение React для связи с приложением Flask, чтения и записи в базу данных MySQL.Я пытаюсь начать с простой веб-страницы, где вы вводите текст в текстовое поле, нажимаете кнопку, и это записывает в базу данных новую запись.
Проблема в том, что я не могу получить текст для передачи изприложение React в базу данных.
Вот мое приложение Flask:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask import request
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:password@localhost/testdb'
db = SQLAlchemy(app)
class Person(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(80), unique=False, nullable=False)
@app.route('/signup', methods = ['GET', 'POST'])
def signup():
if request.method == 'POST':
json_data = request.get_json()
addData = Person(name=json_data.get('name'))
db.session.add(addData)
db.session.commit()
if __name__ == '__main__':
app.run()
Пока мой файл signup.jsx:
import React, { Component } from 'react';
import './signup.css';
import axios from 'axios';
class Signup extends Component {
constructor(props){
super(props);
this.state = {
name: ''
}
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event){
this.setState({ name: event.target.value });
}
handleSubmit(event){
alert('test');
event.preventDefault(); //What is this?
const name = {
name: this.state.name
};
alert(JSON.stringify(name));
axios.post(`http://127.0.0.1:5000/signup`, {name})
.then(res => {
console.log(res);
console.log(res.data);
alert(this.state.name);
})
.catch(err => {
console.log(err);
alert(err);
});
}
render(){
return (
<div className='signup'>
<form onSubmit={this.handleSubmit}>
<input type='text' name='name' onChange={this.handleChange}/><br/>
<input type='submit' value='Submit'/>
</form>
</div>
);
}
}
export default Signup;
Я запустилэто, и это работает:
eg = Person(name='what')
db.session.add(eg)
db.session.commit()
Это не проблема чтения / записи и не проблема подключения;похоже, это ошибка кодирования.
Я получаю это сообщение, когда нажимаю кнопку Submit:
127.0.0.1 - - [19/Feb/2019 00:22:26] "OPTIONS /signup HTTP/1.1" 200 -
Однако, когда я запрашиваю таблицу в MySQL Workbench, новых данных нет.
Приложение React работает на localhost: 3000, а приложение Flask работает на http://127.0.0.1:5000/
Где я ошибаюсь?
РЕДАКТИРОВАТЬ Я отредактировал свой код и добавил несколько предупрежденийи печатает.Когда я печатаю из метода signup (), ничего не печатается.В функции handleSubmit я всегда получаю предупреждение об ошибке, в котором говорится, что существует «Ошибка: ошибка сети»
РЕДАКТИРОВАТЬ Я добавил CORS в приложение Flask.Данные записываются, но Axios выдает 500 кодов во Flask:
127.0.0.1 - - [19/Feb/2019 20:59:31] "POST /signup HTTP/1.1" 500 -