Python 不易损坏类型:';dict';烧瓶内应用程序
下面是关于如何在Python中使用Flask设计RESTAPI的教程。它位于这里: 在赛后环节之前,一切都进展顺利。我精确地跟踪了所有内容,但是我不断从“return jsonify{'task',task}”中得到一个类型错误“unhabable type:'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():
@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
的集合,字典不可哈希非常感谢您,我不知道在盯着代码看了这么久之后,我是如何忽略了这个输入错误的。