猿问

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

我有一个接受 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 执行此操作时,我收到服务器错误。


Python

import importlib

import subprocess

import csv

import sys

import requests


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)

任何帮助表示赞赏。


慕神8447489
浏览 103回答 2
2回答

米脂

修复了这个问题。问题在于我如何将数据发送到服务器。这就是我所拥有的:targetWikiPage = 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)请注意,我的requests.post有两个值被传递。网址和数据。问题如下:数据格式不正确。这应该是:data = json.dumps({"title": eventTitle, "date": eventDate})我需要添加标题:headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}我需要将一个data值传递给服务器,而不是jsonrequests.post("http://localhost:5002/events", headers=headers, data=data)这将我的文件更改为:targetWikiPage = input("Target Wiki Page: ")eventTitle = input("Event Title: ")eventDate = input("Event Date: ")#POST AN EVENTdata = 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)

富国沪深

您在字符串对象中有 JSON 数据。尝试通过字符串的键从字符串中提取值将产生您所描述的错误>>> response = '{"date":"Sun, 23 Feb 2020 00:00:00 GMT","title":"TEst Event 3"}'>>> response_date = response["date"]Traceback (most recent call last):&nbsp; File "<pyshell#1>", line 1, in <module>&nbsp; &nbsp; 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'
随时随地看视频慕课网APP

相关分类

Python
我要回答