Flask_Restful parser.parse_args()

如何解决Flask_Restful parser.parse_args()

我回到了我之前使用过的flask RESTful 的一个项目中,但每当我尝试发布请求时,args = parser.parse_args() 行都会破坏代码,并给出错误读数:

File "/usr/local/lib/python3.9/site-packages/werkzeug/datastructures.py",line 554,in update

for key,value in iter_multi_items(mapping):

TypeError: cannot unpack non-iterable ellipsis object

出于某种原因,解析器似乎对自己的参数有问题,post 函数是:

def post(self):
    from flask_restful import reqparse
    parser = reqparse.RequestParser()
    parser.add_argument('rate',type=int,help='Rate cannot be converted')
    parser.add_argument('name')
    args = parser.parse_args()

任何帮助或指导将不胜感激。

-- 编辑

为了提供更多上下文,我的 init 文件看起来像这样,在 postman 中调用 POST 函数时发生的错误

from flask import Flask,g
from flask_restful import Resource,Api,reqparse
import os
import shelve

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

def get_db():
    db = getattr(g,'_database',None)
    if db is None:
        db = g._database = shelve.open("rates.db")
    return db

@app.teardown_appcontext
def teardown_db(exception):
    db = getattr(g,None)
    if db is not None:
        db.close()

@app.route("/")
def index():
    return "Hello World"

class RateList(Resource):
    def get(self):
        shelf = get_db()
        keys = list(shelf.keys())

        devices = []

        for key in keys:
            devices.append(shelf[key])

        return {'message' : 'Success','data' : devices},200

    def post(self):
        parser = reqparse.RequestParser()
        parser.add_argument('rate',help='Rate cannot be converted')
        parser.add_argument('name')
        args = parser.parse_args()

        shelf = get_db()
        shelf[args['rate']] = args

        return {'message' : 'Rate registered','data' : args},201

class Rate(Resource):
    def get(self,rate):
        shelf = get_db()

        if not(rate in shelf):
            return {'message' : 'Rate not found','data' : {}},404
        
        return {'message' : 'Rate found','data' : shelf[rate]},200

    def delete(self,404
        
        del shelf[rate]
        return {'message' : 'Rate deleted',200

api.add_resource(RateList,'/Rate')
api.add_resource(Rate,'/Rate/<string:rate>')

Docker-compose 文件

version: '3.4'

services:
    stock-registry:
        build: .
        volumes:
            - .:/usr/src/app
        ports:
            - 5001:80

Dockerfile:

FROM python:3
workdir /usr/src/app
copY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
copY . .
CMD ["python","./run.py"]

运行.py:

from stock_registry import app
app.run(host='0.0.0.0',port=80,debug=True)

-- 编辑 2

在 post 请求上发送的 JSON 正文,使用邮递员:

{
    "rate" : 1,"name" : "Test" 
}

显示尝试此操作时的完整错误日志:

172.22.0.1 - - [30/Jun/2021 12:37:12] "POST /shares HTTP/1.1" 500 -

Traceback (most recent call last):

File "/usr/local/lib/python3.9/site-packages/flask/app.py",line 1997,in __call__

return self.wsgi_app(environ,start_response)

File "/usr/local/lib/python3.9/site-packages/flask/app.py",line 1985,in wsgi_app

response = self.handle_exception(e)

File "/usr/local/lib/python3.9/site-packages/flask_restful/__init__.py",line 265,in error_router

return original_handler(e)

File "/usr/local/lib/python3.9/site-packages/flask/app.py",line 1540,in handle_exception

reraise(exc_type,exc_value,tb)

File "/usr/local/lib/python3.9/site-packages/flask/_compat.py",line 32,in reraise

raise value.with_traceback(tb)

File "/usr/local/lib/python3.9/site-packages/flask/app.py",line 1982,in wsgi_app

response = self.full_dispatch_request()

File "/usr/local/lib/python3.9/site-packages/flask/app.py",line 1614,in full_dispatch_request

rv = self.handle_user_exception(e)

File "/usr/local/lib/python3.9/site-packages/flask_restful/__init__.py",line 1517,in handle_user_exception

reraise(exc_type,line 1612,in full_dispatch_request

rv = self.dispatch_request()

File "/usr/local/lib/python3.9/site-packages/flask/app.py",line 1598,in dispatch_request

return self.view_functions[rule.endpoint](**req.view_args)

File "/usr/local/lib/python3.9/site-packages/flask_restful/__init__.py",line 446,in wrapper

resp = resource(*args,**kwargs)

File "/usr/local/lib/python3.9/site-packages/flask/views.py",line 84,in view

return self.dispatch_request(*args,**kwargs)

File "/usr/local/lib/python3.9/site-packages/flask_restful/__init__.py",line 550,in dispatch_request

resp = meth(*args,**kwargs)

File "/usr/src/app/stock_registry/__init__.py",line 65,in post

args = parser.parse_args()

File "/usr/local/lib/python3.9/site-packages/flask_restful/reqparse.py",line 261,in parse_args

value,found = arg.parse(req)

File "/usr/local/lib/python3.9/site-packages/flask_restful/reqparse.py",line 143,in parse

source = self.source(request)

File "/usr/local/lib/python3.9/site-packages/flask_restful/reqparse.py",line 101,in source

values.update(value)

File "/usr/local/lib/python3.9/site-packages/werkzeug/datastructures.py",in update

for key,value in iter_multi_items(mapping):


TypeError: cannot unpack non-iterable ellipsis object

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?