Flask 请求语法错误的问题

Issue with bad request syntax with flask

我testing/attempting学习flask,flast_restful。我得到的这个问题是:

code 400, message Bad request syntax ('name=testitem')

main.py:

from flask import Flask,request
from flask_restful import Api, Resource, reqparse

app = Flask(__name__)
api = Api(app)

product_put_args = reqparse.RequestParser()
product_put_args.add_argument("name", type = str, help = "Name of the product")
product_put_args.add_argument("quantity", type = int, help = "Quantity of the item")

products = {}

class Product(Resource):
    def get(self, barcode):
        return products[barcode]

    def put(self, barcode):
        args = product_put_args.parse_args()
        return {barcode: args}

api.add_resource(Product, "/product/<int:barcode>")

if(__name__) == "__main__":
    app.run(debug = True)

还有我的 test.py

import requests

base = "http://127.0.0.1:5000/"

response = requests.put(base + "product/1", {"name": "testitem"})
print(response.json())

我已经尝试过修改 mat 并更改两个文件以找出问题所在,我觉得这很简单,但如果你能帮助我,我敢打赌这会对我和其他许多人有所帮助正在尝试开始休息 API.

您需要将位置信息添加到 RequestParser 默认情况下它会尝试解析来自 flask.Request.valuesflask.Request.json 的值,但在您的情况下,需要从 flask.request.form。下面的代码修复了你的错误

from flask import Flask,request
from flask_restful import Api, Resource, reqparse

app = Flask(__name__)
api = Api(app)

product_put_args = reqparse.RequestParser()
product_put_args.add_argument("name", type = str, help = "Name of the product", location='form')
product_put_args.add_argument("quantity", type = int, help = "Quantity of the item", location='form')

products = {}

class Product(Resource):
    def get(self, barcode):
        return products[barcode]

    def put(self, barcode):
        args = product_put_args.parse_args()
        products[barcode] = args['name']
        return {barcode: args}

api.add_resource(Product, "/product/<int:barcode>")

if(__name__) == "__main__":
    app.run(debug = True)