繁体   English   中英

Flask Curl POST - 500 内部安全错误 - Pyrest API

[英]Flask Curl POST - 500 Internal Secer Error - Pyrest API

尝试设置 pyrest 时出现 500 内部服务器错误。

我正在使用来自https://linuxhint.com/rest_api_python/的指南来尝试在我的 python 3 服务器中设置休息 API,我在 api.py 中使用下面的代码并使用终端,第一个 GET 请求我已经投入工作并很好地显示数据,当涉及到 POST 请求时,我正在尝试使用 Ubuntu 在虚拟机上工作,但出现 500 个内部错误...

from flask import Flask, jsonify

app = Flask(__name__)

accounts = [
    {'name': "Billy", 'balance': 450.0},
    {'name': "Kelly", 'balance': 250.0}
     ]


@app.route("/accounts", methods=["GET"])
def getAccounts():
    return jsonify(accounts)
    
    
@app.route("/account/<id>", methods=["GET"])
def getAccount(id):
    id = int(id) - 1
    return jsonify(accounts[id])
    
@app.route("/account", methods=["POST"])
def addAccount():
    name = request.json['name']
    balance = request.json['balance']
    data = {'name': name, 'balance': balance}
    accounts.append(data)
    
    return jsonify(data)    
    
    
if __name__ == '__main__':
    app.run(port=8080)
    

我猜代码是正确的,它更多的是服务器问题,问题是我正在尝试将此服务安装到我的服务器上以使 POST 方法正常工作,不确定我是否缺少任何步骤。

我在用

curl -X POST -H "Content-Type: application/json" -d '{"name": "Shovon", "balance": 100}' http://127.0.0.1:8080/account

将数据“添加”到 api.py 文件中的帐户列表中。

感谢您的帮助,这是我第一次使用 FLASK 和 APP.Route,所以如果是新手错误,请原谅我。

您忘记从Flask导入request ,因此addAccount()函数中的前两行会引发 500 错误。 要解决此问题,您只需将顶部的导入行更改为:

from flask import Flask, jsonify, request

另外要注意的另一件事是,鼓励按照 PEP8 标准编写函数名称,在单词之间使用下划线而不是驼峰式大小写。 这是您文件的固定版本:

from flask import Flask, jsonify, request

app = Flask(__name__)

accounts = [
    {'name': "Billy", 'balance': 450.0},
    {'name': "Kelly", 'balance': 250.0}
     ]


@app.route("/accounts", methods=["GET"])
def get_accounts():
    return jsonify(accounts)
    
    
@app.route("/account/<id>", methods=["GET"])
def get_account(id):
    id = int(id) - 1
    return jsonify(accounts[id])
    
@app.route("/account", methods=["POST"])
def add_account():
    name = request.json['name']
    balance = request.json['balance']
    data = {'name': name, 'balance': balance}
    accounts.append(data)
    
    return jsonify(data)    
    
    
if __name__ == '__main__':
    app.run(port=8080)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM