为了账号安全,请及时绑定邮箱和手机立即绑定

无法使用 Python 发布到 Flask Restful 端点

无法使用 Python 发布到 Flask Restful 端点

慕神8447489 2023-09-12 19:54:06
我有一个接受 JSON 的端点api.add_resource(EventsList, '/events')Flask Restful / SQL Alchemy 是:class EventsList (Resource):    #RETURNS ALL EVENTS    def get(self):        schema = EventSchema()        result = db.session.query(EventModel).all()        return schema.dump(result, many=True), 200    #POSTS A SINGLE EVENT    def post(self):        title = request.json['title']        date = request.json['date']        event = EventModel(title=title,date=date)        db.session.add(event)        db.session.commit()        data = ({'title': event.title,                 'date': event.date})        response = jsonify(data)        response.status_code = 200        return response当通过命令行使用curl时,这绝对可以正常工作:卷曲请求curl http://localhost:5002/events -H "Content-Type: application/json" -d '{"title": "TEst Event 3", "date":"2020-02-23"}'卷曲响应响应包含预期的数据:{"date":"Sun, 23 Feb 2020 00:00:00 GMT","title":"TEst Event 3"}这一切都很好。但是,当我尝试从 Python 执行此操作时,我收到服务器错误。Pythonimport importlibimport subprocessimport csvimport sysimport requeststargetWikiPage = input("Target Wiki Page: ")eventTitle = input("Event Title: ")eventDate = input("Event Date: ")    #POST AN EVENTdata = '{"title": "'+eventTitle+'","date":"'+eventDate+'"}'print("SENDING EVENT DATA:")print(requests.body)print(requests.headers)response = requests.post("http://localhost:5002/events", json=data)任何帮助表示赞赏。
查看完整描述

2 回答

?
米脂

TA贡献1836条经验 获得超3个赞

修复了这个问题。


问题在于我如何将数据发送到服务器。这就是我所拥有的:


targetWikiPage = input("Target Wiki Page: ")

eventTitle = input("Event Title: ")

eventDate = input("Event Date: ")


    

#POST AN EVENT

data = '{"title": "'+eventTitle+'","date":"'+eventDate+'"}'

print("SENDING EVENT DATA:")

print(requests.body)

print(requests.headers)


response = requests.post("http://localhost:5002/events", json=data)

请注意,我的requests.post有两个值被传递。网址和数据。

问题如下:

  1. 数据格式不正确。这应该是:

data = json.dumps({"title": eventTitle, "date": eventDate})

  1. 我需要添加标题:

headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}

  1. 我需要将一个data值传递给服务器,而不是json

requests.post("http://localhost:5002/events", headers=headers, data=data)

这将我的文件更改为:

targetWikiPage = input("Target Wiki Page: ")

eventTitle = input("Event Title: ")

eventDate = input("Event Date: ")


#POST AN EVENT

data = json.dumps({"title": eventTitle, "date": eventDate})

headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}

print(data)

print(headers)

print("SENDING EVENT DATA:")


response = requests.post("http://localhost:5002/events", headers=headers, data=data)

json=json.loads(response.content)


查看完整回答
反对 回复 2023-09-12
?
富国沪深

TA贡献1790条经验 获得超9个赞

您在字符串对象中有 JSON 数据。尝试通过字符串的键从字符串中提取值将产生您所描述的错误


>>> response = '{"date":"Sun, 23 Feb 2020 00:00:00 GMT","title":"TEst Event 3"}'

>>> response_date = response["date"]

Traceback (most recent call last):

  File "<pyshell#1>", line 1, in <module>

    response_date = response["date"]

TypeError: string indices must be integers

您需要先将字符串转换为a dict,然后提取值


>>> import json

>>> response_as_json = json.loads(response)

>>> response_date = response_as_json["date"]

>>> response_date

'Sun, 23 Feb 2020 00:00:00 GMT'


查看完整回答
反对 回复 2023-09-12
  • 2 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信