Flask 请求语法错误的问题

ish*_*147 4 python bad-request flask flask-restful

我正在测试/尝试学习 Flask 和 flast_restful。我得到的这个问题是:

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

主要.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)
Run Code Online (Sandbox Code Playgroud)

和我的 测试.py

import requests

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

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

我试图改革 mat 并更改这两个文件,以找出发送问题的原因,我觉得这很简单,但如果你能帮助我,我打赌这将帮助我和许多其他正在尝试开始创建的人一个休息 API。

小智 12

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

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)
Run Code Online (Sandbox Code Playgroud)