Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 不易损坏类型:';dict';烧瓶内应用程序_Python_Rest_Flask_Api Design - Fatal编程技术网

Python 不易损坏类型:';dict';烧瓶内应用程序

Python 不易损坏类型:';dict';烧瓶内应用程序,python,rest,flask,api-design,Python,Rest,Flask,Api Design,下面是关于如何在Python中使用Flask设计RESTAPI的教程。它位于这里: 在赛后环节之前,一切都进展顺利。我精确地跟踪了所有内容,但是我不断从“return jsonify{'task',task}”中得到一个类型错误“unhabable type:'dict'”。我已经查看了几十次示例代码和我自己的代码,没有发现任何差异。以下是我所拥有的: @app.route('/todo/api/v1.0/tasks', methods=['POST']) def create_task():

下面是关于如何在Python中使用Flask设计RESTAPI的教程。它位于这里:

在赛后环节之前,一切都进展顺利。我精确地跟踪了所有内容,但是我不断从“return jsonify{'task',task}”中得到一个类型错误“unhabable type:'dict'”。我已经查看了几十次示例代码和我自己的代码,没有发现任何差异。以下是我所拥有的:

@app.route('/todo/api/v1.0/tasks', methods=['POST'])
def create_task():
        if not request.json or not 'title' in request.json:
                abort(400)
        task = {
                'id': tasks[-1]['id'] + 1,
                'title': request.json['title'],
                'description': request.json.get('description', ""),
                'done': False
        }
        tasks.append(task)
        return jsonify({'task', task}), 201
鉴于本教程已有4年的历史,在这段时间内是否发生了一些变化,使得该示例因某种原因而无效。我在Python2.7.3中运行它

以下是我的完整脚本,供进一步了解:

from flask import Flask, jsonify, make_response, abort, request

app = Flask(__name__)

tasks = [
        {
                'id': 1,
                'title': u'Buy groceries',
                'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',
                'done': False
        },
        {
                'id': 2,
                'title': u'Learn Python',
                'description': u'Need to find a good Python tutorial on the web',
                'done': False
        }
]

@app.errorhandler(404)
def not_found(error):
        return make_response(jsonify({'error': 'Not found'}), 404)

@app.errorhandler(400)
def bad_request(error):
        return make_response(jsonify({'error': 'Bad request'}), 400)

@app.route('/todo/api/v1.0/tasks', methods=['GET'])
def get_tasks():
        return jsonify({'tasks': tasks})

@app.route('/todo/api/v1.0/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
        task = [task for task in tasks if task['id'] == task_id]
        if len(task) == 0:
                abort(404)
        return jsonify({'task': task[0]})

@app.route('/todo/api/v1.0/tasks', methods=['POST'])
def create_task():
        if not request.json or not 'title' in request.json:
                abort(400)
        task = {
                'id': tasks[-1]['id'] + 1,
                'title': request.json['title'],
                'description': request.json.get('description', ""),
                'done': False
        }
        tasks.append(task)
        return jsonify({'task', task}), 201

if __name__ == '__main__':
        app.run(host='0.0.0.0', debug=True)
从烧瓶导入烧瓶,jsonify,作出响应,中止,请求
app=烧瓶(名称)
任务=[
{
“id”:1,
"标题":你"买杂货",,
“描述”:u“牛奶、奶酪、比萨饼、水果、泰诺”,
“完成”:错误
},
{
“id”:2,
“标题”:你“学习Python”,
'description':您需要在web上找到一个好的Python教程',
“完成”:错误
}
]
@app.errorhandler(404)
未找到def_(错误):
返回make_响应(jsonify({'error':'notfound'}),404)
@app.errorhandler(400)
def坏_请求(错误):
返回make_响应(jsonify({'error':'Bad request}),400)
@app.route('/todo/api/v1.0/tasks',methods=['GET'])
def get_任务():
返回jsonify({'tasks':tasks})
@app.route('/todo/api/v1.0/tasks/',方法=['GET'])
def get_任务(任务id):
task=[任务中任务的任务,如果任务['id']==任务id]
如果len(任务)==0:
中止(404)
返回jsonify({'task':任务[0]})
@app.route('/todo/api/v1.0/tasks',methods=['POST'])
def create_任务():
如果不是request.json或不是request.json中的“title”:
中止(400)
任务={
“id”:任务[-1]['id']+1,
'title':request.json['title'],
'description':request.json.get('description',“”),
“完成”:错误
}
tasks.append(任务)
返回jsonify({'task',task}),201
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app.run(host='0.0.0.0',debug=True)

谢谢。

正如Pawel Kordowski前面提到的,您想要返回的是一本字典,而不是一套:

return jsonify({'task': task}), 201

{'task',task}
=>
{'task':task}
您的代码试图创建一个包含字符串
'task'
和字典
task
的集合,字典不可哈希非常感谢您,我不知道在盯着代码看了这么久之后,我是如何忽略了这个输入错误的。