【问题标题】:Flask-restful api post gives back empty body via javascriptFlask-restful api post通过javascript返回空体
【发布时间】: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


【解决方案1】:

经过相当多的调试,我自己找到了解决方案。希望它可以帮助某人:

替换data = flask.request.get_json()

data = flask.request.json

【讨论】:

    猜你喜欢
    • 2017-12-05
    • 2016-06-28
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 2015-11-22
    • 2014-04-03
    相关资源
    最近更新 更多