Hou*_*man 8 python rest json flask flask-restful
看来我有另一个JSON问题,这次发布到REST服务.我在用Flask-Restful
.
api.add_resource(Records, '/rest/records/<string:email>/<string:password>/<string:last_sync_date>')
parser = reqparse.RequestParser()
parser.add_argument('record_date', type=str)
parser.add_argument('records', type=str)
parser.add_argument('rating', type=str)
parser.add_argument('notes', type=str)
class Records(Resource):
def post(self, email, password, last_sync_date):
args = parser.parse_args()
records = args['records'] # 'records' = None, but why?
return records, 201
Run Code Online (Sandbox Code Playgroud)
单元测试:
resource_fields = {
'record_date': fields.String,
'rating': fields.Integer,
'notes': fields.String,
'last_updated': fields.DateTime,
}
records = {"records":[]}
records["records"].append(marshal(record1, resource_fields))
rv = self.app.post('/rest/records/{0}/{1}/{2}'.format(email, password, sync_date), data=json.dumps(records))
Run Code Online (Sandbox Code Playgroud)
json.dumps(记录)是:
str: {"records": [{"rating": 1, "notes": null, "last_updated": "Tue, 15 Oct 2013 15:52:44 -0000", "record_date": "2013-10-15 15:52:44.746815"}]}
Run Code Online (Sandbox Code Playgroud)
为什么args['records']
没有,我明确地通过网络发送它?
更新:
奇怪的是,当我发送一个单独的对象时,它的所有花花公子.这么奇怪:
record = dict(record_date=record1.record_date, rating=record1.rating, notes=record1.notes, last_updated=record1.last_updated)
rv = self.app.post('/rest/records/{0}/{1}/{2}'.format(email, password, sync_date), data=record)
Run Code Online (Sandbox Code Playgroud)
args:
{'records': None, 'notes': None, 'task': None, 'record_date': '2013-10-15 16:48:40.662744', 'rating': '1'}
Run Code Online (Sandbox Code Playgroud)
最后我把这个问题作为一个问题来解决烧瓶问题github并得到了这个解决方案,这对我有用.感谢Doug Black.
reqparse并不真正知道如何处理JSON.要处理JSON帖子,您需要使用flask.request.json dict.
这是您可能想要的更新示例:
from flask import Flask, request
from flask.ext import restful
class Records(restful.Resource):
def post(self, email, password, last_sync_date):
records = request.json['records']
return records, 201
app = Flask(__name__)
api = restful.Api(app)
api.add_resource(
Records,
'/rest/records/<string:email>/<string:password>/<string:last_sync_date>'
)
Run Code Online (Sandbox Code Playgroud)
request.json上的文档就在这里.
您需要确保将内容类型标头设置为application/json,以便知道填充json字典.
self.app.post(
'/rest/records/{0}/{1}/{2}'.format(email, password, sync_date),
data=json.dumps(records),
headers={'Content-Type': 'application/json'
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10414 次 |
最近记录: |