【发布时间】:2021-12-18 01:24:26
【问题描述】:
有一个通过 python 运行的本地数据库,我正在尝试通过网站对其进行一些 api 请求。首先将 GET 和 POST 都尝试为 python unittest,效果很好。 然后使用javascript; GET 函数工作完美,但我的 POST 函数,无论我做什么,都会将一个空主体发送到 python 函数(python 代码中的变量数据),或者换句话说,一个没有任何内容的 dict,而我正在通过它传递数据。
相关python sn-p:
conn = sq3.connect("temp.db", check_same_thread=False)
class Login(Resource):
def post(self):
data = flask.request.form.to_dict()
lst = conn.execute(f"""SELECT AccountID, Role FROM Account
WHERE Email = \"{data['email']}\"
AND PassW = \"{data['passw_hashed']}\"
""").fetchall()
return {"LoginSucces": [{"AccountId": e[0], "Role": e[1]} for e in lst]}
app = flask.Flask(__name__)
cors = CORS(app, resources={r"/*": {"origins": '*'}})
api = Api(app)
api.add_resource(Login, "/login")
app.run(port=8080)
Javascript:
function req_login(){
let email_p = document.getElementById("login_email").value
let passw = document.getElementById("login_passw").value
let data = JSON.stringify({email: email_p,passw_hashed: passw.hashCode()});
const request = new XMLHttpRequest();
request.open("POST", IP+"/login");
request.setRequestHeader("Accept", "application/json");
request.setRequestHeader('Content-Type', 'application/json');
request.send(data);
request.onload = (e) => {
let jsret = JSON.parse(request.response);
let topkey = Object.keys(jsret);
let data_arr = jsret[topkey];
alert(data_arr['AccountId']);
}
}
也尝试使用 javascript 中的手动数据来查看读取数据是否有问题,但使用以下代码没有成功:
const data = `{email: "tst@gmail.com", passw: "testtest123"}`;
哪里出了问题,我可以尝试/更改什么。如果您需要更多信息,请发送评论
【问题讨论】:
-
flask.request.form.to_dict()似乎是错误的,因为您将内容类型指定为application/json而不是application/x-www-form-urlencoded。你试过flask.request.get_json()吗? -
@momo 将立即尝试。我使用 to_dict() 是因为它最初给了我一个 immutablemultidict 类型的对象
-
使用有问题的调试方法,我得到了以下字符串对象结果,我需要将其转换回函数字典。我不知道如何:
flask.request.data.decode('UTF-8')回馈:'{Id: 78912,Customer: "Jason Sweet",Quantity: 1,Price: 18.00}'
标签: javascript python flask flask-restful