【问题标题】:flask restful and sqlalchemy error: "uname": "Missing required parameter in the JSON body"flask restful 和 sqlalchemy 错误:“uname”:“JSON 正文中缺少必需的参数”
【发布时间】:2016-01-28 21:26:14
【问题描述】:
 parser = reqparse.RequestParser()
 parser.add_argument('uname', type = unicode, required = True, location= 'json')
 parser.add_argument('pword', type = unicode, required = True, location= 'json')
 parser.add_argument('fname', type = unicode, required = True, location= 'json')
 parser.add_argument('lname', type = unicode, required = True, location= 'json')
 parser.add_argument('gender', type = unicode, required = True, location= 'json')
 parser.add_argument('email_id', type = unicode, required = True, location= 'json')

 session= Session()
 class store_user(Resource):
    def post(self):
        #args=request.get_json(force = True)
        args = parser.parse_args()
        unq_id = str(uuid.uuid4()) 

        user_data = {'uid' : unq_id, 'username' : args['uname'], 'password' : args['pword'], 'f_name' : args['fname'],              
                        'l_name' : args['lname'], 'sex' : args['gender'], 'email_id' : args['email_id']}
        auser = user(uid = user_data['uid'], username = user_data['username'], password = user_data['password'], f_name =
                    user_data['f_name'], l_name = user_data['l_name'], sex =
                    user_data['sex'], email_id = user_data['email_id'])
        session.add(auser)
        session.commit()    


        #return user_data
        #return jsonify(auser)

 api.add_resource(store_user, '/user', endpoint='user')

向数据库添加新数据时出现错误。 user 是映射到 user_info 表的类,而 user 是 user 类的对象。我在解析请求数据时遇到问题,但我无法解决。下面是使用 curl 命令在终端上的输出:

命令:

curl http://127.0.0.1:5000/user -d "uname= man, pword= uuoiuu, fname= manish, lname= kumar, gender= male, emailid= mkcomp12@gmail.com" -X POST -v

输出:

> * Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 5000 (#0)
> POST /user HTTP/1.1
> User-Agent: curl/7.35.0
> Host: 127.0.0.1:5000
> Accept: */*
> Content-Length: 99
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 99 out of 99 bytes
* HTTP 1.0, assume close after body
< HTTP/1.0 400 BAD REQUEST
< Content-Type: application/json
< Content-Length: 90
< Server: Werkzeug/0.9.4 Python/2.7.6
< Date: Thu, 28 Jan 2016 07:31:56 GMT
< 
{
    "message": {
        "uname": "Missing required parameter in the JSON body"
    }
}

【问题讨论】:

  • 有人请编辑它...这里急需帮助...我是 python 新手
  • 至少添加错误消息会有所帮助。
  • 立即查看。我已经在终端上包含了输出。
  • 能否也请给我们看看您发送的 curl 命令?
  • 也做了...你现在可以检查一下

标签: python parsing sqlalchemy flask-restful


【解决方案1】:

我认为你的 curl 命令有两个问题:

  1. 您需要交出 -H "Content-Type: application/json" 以表明您将发送 json 数据(看看这个answer

  2. 你必须把你的数据作为json数据交出来:

    '{"uname":"man","pword":"uuoiuu"}'

【讨论】:

    【解决方案2】:

    您必须正确格式化输入数据,无论是 JSON(带有“Content-Type: application/json”标头)还是 URL 格式。由于您在参数定义中指定了 location=json,因此您必须将其格式化为带有 Content-Type 标头的 JSON。

    这是你的命令:curl http://127.0.0.1:5000/user -H 'Content-Type: application/json' -d '{"uname":"man", "pword":"uuoiuu", "fname":"manish", "lname":"kumar", "gender":"male", "emailid":"mkcomp12@gmail.com}' -X POST -v

    【讨论】:

    • 很高兴听到这个消息。如果答案是正确的并且对您有所帮助,请点击检查,以便其他人知道它有帮助。
    猜你喜欢
    • 2022-01-01
    • 2021-05-09
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    相关资源
    最近更新 更多