【问题标题】:Python Requests POST error: __init__() takes 2 arguments (1 given)Python 请求 POST 错误:__init__() 需要 2 个参数(给定 1 个)
【发布时间】:2015-06-24 19:06:47
【问题描述】:

所以我有一个 Flask 应用程序,它使用 Flask-Restless 和 Flask-SQLAlchemy 模块来创建 API。我的 GET 请求工作正常,但 POST 请求却不行。

来自models.py:

from application import db

class User(db.Model):
    __bind_key__= 'users'
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(80))

    def __init__(self, email):
        self.email = email

来自 application.py(API 设置):

from flask.ext.sqlalchemy import SQLAlchemy
import flask.ext.restless
db = SQLAlchemy(application)

manager = flask.ext.restless.APIManager(application, flask_sqlalchemy_db=db)
manager.create_api(User, methods=['GET', 'POST'])

Requests 可以很好地处理对 API 的 GET 请求,但是当我有这样的 POST 请求时:

import json
import requests

url = 'http:<ip>:<port>/api/user'
data = {'email': '1234@here.com'}
headers = {'Content-type': 'application/json'}
r = requests.post(url, data=json.dumps(data), headers=headers)

我收到此错误:

ERROR in views [X:\Python27\lib\site-packages\flask_restless\views.py:413]:
need more than 1 value to unpack
--------------------------------------------------------------------------------
Traceback (most recent call last):
  File "X:\Python27\lib\site-packages\flask_restless\views.py", line 409, in extract_error_messages
    left, right = str(exception).rsplit(':', 1)
ValueError: need more than 1 value to unpack

我知道这与我发送的 json 格式的电子邮件数据有关,但我很难找出它到底想要什么。任何帮助表示赞赏!

【问题讨论】:

  • 异常的full tr​​aceback是什么?
  • requests 现在本地处理发送 JSON;你可以在发送之前使用requests.post(url, json=data)data 编码为 JSON,并且 Content-Type 标头将自动为你设置。
  • 否则你的requests 代码看起来很好。我认为这是一个 Flask 方面的问题,与 requests 无关。
  • @MartijnPieters,我必须获得最新版本的请求才能使用 json 快捷方式,但是当我这样做时,Flask-Restless 抛出错误:ERROR in views [X:\Python27\lib\site-packages\flask_restless\views.py:413]: need more than 1 value to unpack -------------------------------------------------------------------------------- Traceback (most recent call last): File "X:\Python27\lib\site-packages\flask_restless\views.py", line 409, in extract_error_messages left, right = str(exception).rsplit(':', 1) ValueError: need more than 1 value to unpack
  • 这听起来是一个非常不同的错误,并且看起来不完整。

标签: python api post flask python-requests


【解决方案1】:

我找到了解决办法!

在models.py下:

def __init__(self, email):

电子邮件(以及任何其他模型的参数)需要有 =None

def __init__(self, email=None):

之后,这段代码就可以工作了

import requests

url = 'http:<ip>:<port>/api/user'
data = {'email': '1234@here.com'}
r = requests.post(url, json=data)

【讨论】:

    猜你喜欢
    • 2018-03-29
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    相关资源
    最近更新 更多