如何解决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 举报,一经查实,本站将立刻删除。