收到响应 200 但没有任何反应 (flask-mysql)
got response 200 but nothing happen (flask-mysql)
所以我遵循这个 tutorial,在我到达步骤连接 Python 到 MySQL 之后,我得到了 200 响应代码,但是在邮递员上我看到了这个:
{
"error": "%d 格式:需要数字,而不是 str"
}
然后我在 MySQL 上检查了我的 table,没有任何反应,它仍然是空的。请帮助我。
代码如下:
from flask import Flask
from flask_restful import Resource, Api, reqparse
from flaskext.mysql import MySQL
mysql = MySQL()
app = Flask(__name__)
app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = 'root'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
app.config['MYSQL_DATABASE_PORT'] = '5002'
app.config['MYSQL_DATABASE_DB'] = 'itemlistdb'
mysql.init_app(app)
api = Api(app)
class CreateUser(Resource):
def post(self):
try:
parser = reqparse.RequestParser()
parser.add_argument('email', type=str, help='Email address to create user')
parser.add_argument('password', type=str, help='Password to create user')
args = parser.parse_args()
p_Username = args['email']
p_Password = args['password']
conn = mysql.connect()
cursor = mysql.get_db().cursor()
cursor.callproc('spCreateuser',(p_Username,p_Password))
data = cursor.fetchall()
if len(data) is 0:
conn.commit()
return {'statusCode':'200','Message': 'User creation success'}
else:
return {'StatusCode':'1000','Message': str(data[0])}
except Exception as e:
return {'error': str(e)}
class AuthenticateUser(Resource):
def post(self):
try:
parser = reqparse.RequestParser()
parser.add_argument('email', type=str, help='Email address for Authentication')
parser.add_argument('password', type=str, help='Password for Authentication')
args = parser.parse_args()
p_Username = args['email']
p_Password = args['password']
conn = mysql.connect()
cursor = conn.cursor()
cursor.callproc('sp_AuthenticateUser',(p_Username,))
data = cursor.fetchall()
if(len(data)>0):
if(str(data[0][2])==p_Password):
return {'status':200,'UserId':str(data[0][0])}
else:
return {'status':100,'message':'Authentication failure'}
except Exception as e:
return {'error': str(e)}
api.add_resource(CreateUser, '/CreateUser')
api.add_resource(AuthenticateUser, '/AuthenticateUser')
if __name__ == '__main__':
app.run(debug=True)
Screenshot with the error
我怀疑问题不是创建用户的调用,而是应用程序连接本身。
具体来说,我想知道这个:
app.config['MYSQL_DATABASE_PORT'] = '5002'
服务器端口号通常是整数(这不是 Python 的东西,它是一个体系结构标准),所以当 MySQL 尝试连接时,它可能正在做类似的事情:
'<rest-of-the-connection:%d' % app.config['MYSQL_DATABASE_PORT']
不过,在那种情况下,app.config['MYSQL_DATABASE_PORT']
是一个 str,而不是一个 int。
尝试
app.config['MYSQL_DATABASE_PORT'] = 5002
所以我遵循这个 tutorial,在我到达步骤连接 Python 到 MySQL 之后,我得到了 200 响应代码,但是在邮递员上我看到了这个: { "error": "%d 格式:需要数字,而不是 str" }
然后我在 MySQL 上检查了我的 table,没有任何反应,它仍然是空的。请帮助我。
代码如下:
from flask import Flask
from flask_restful import Resource, Api, reqparse
from flaskext.mysql import MySQL
mysql = MySQL()
app = Flask(__name__)
app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = 'root'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
app.config['MYSQL_DATABASE_PORT'] = '5002'
app.config['MYSQL_DATABASE_DB'] = 'itemlistdb'
mysql.init_app(app)
api = Api(app)
class CreateUser(Resource):
def post(self):
try:
parser = reqparse.RequestParser()
parser.add_argument('email', type=str, help='Email address to create user')
parser.add_argument('password', type=str, help='Password to create user')
args = parser.parse_args()
p_Username = args['email']
p_Password = args['password']
conn = mysql.connect()
cursor = mysql.get_db().cursor()
cursor.callproc('spCreateuser',(p_Username,p_Password))
data = cursor.fetchall()
if len(data) is 0:
conn.commit()
return {'statusCode':'200','Message': 'User creation success'}
else:
return {'StatusCode':'1000','Message': str(data[0])}
except Exception as e:
return {'error': str(e)}
class AuthenticateUser(Resource):
def post(self):
try:
parser = reqparse.RequestParser()
parser.add_argument('email', type=str, help='Email address for Authentication')
parser.add_argument('password', type=str, help='Password for Authentication')
args = parser.parse_args()
p_Username = args['email']
p_Password = args['password']
conn = mysql.connect()
cursor = conn.cursor()
cursor.callproc('sp_AuthenticateUser',(p_Username,))
data = cursor.fetchall()
if(len(data)>0):
if(str(data[0][2])==p_Password):
return {'status':200,'UserId':str(data[0][0])}
else:
return {'status':100,'message':'Authentication failure'}
except Exception as e:
return {'error': str(e)}
api.add_resource(CreateUser, '/CreateUser')
api.add_resource(AuthenticateUser, '/AuthenticateUser')
if __name__ == '__main__':
app.run(debug=True)
Screenshot with the error
我怀疑问题不是创建用户的调用,而是应用程序连接本身。
具体来说,我想知道这个:
app.config['MYSQL_DATABASE_PORT'] = '5002'
服务器端口号通常是整数(这不是 Python 的东西,它是一个体系结构标准),所以当 MySQL 尝试连接时,它可能正在做类似的事情:
'<rest-of-the-connection:%d' % app.config['MYSQL_DATABASE_PORT']
不过,在那种情况下,app.config['MYSQL_DATABASE_PORT']
是一个 str,而不是一个 int。
尝试
app.config['MYSQL_DATABASE_PORT'] = 5002