如何在python API程序中检查某些输入是字符串还是unicode:
# POST: Add new item to data
# E.G. '{"title":"Read a book", "description":"Reading..."}'
@app.route('/todo/api/v1.0/tasks', methods=['POST'])
def create_task():
if not request.json or not 'title' in request.json:
abort(400)
if 'title' in request.json and type(request.json['title']) != str:
abort(400)
if 'description' in request.json and type(request.json['description']) is not str:
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': [make_public_task(task)]}), 201
必须改变的代码必须是这一点:
if 'title' in request.json and type(request.json['title']) != str:
和
if 'description' in request.json and type(request.json['description']) is not str:
我试过
not in [str, unicode]:
但这没效果。
有什么想法吗?非常感谢提前。
答案 0 :(得分:1)
您可以按如下方式查看:
if isintance(request.json.get('title'), basestring):
...
basestring是Python 2.7中str和ucicode的常见祖先。通过使用get而不是[]运算符,您甚至可以删除'title' in request.json
检查
答案 1 :(得分:0)
如何在python API程序中检查某些输入是字符串还是unicode:
无需检查
你在Python 3中写作,所以首先没有这样的区别 - unicode
不再存在。您只有一种字符串(str
),并且您有字节缓冲区(bytes
),而您的问题bytes
甚至不相关。
看起来你正在使用Flask? Flask内部负责解码网络请求。当您询问request.json
时,Flask已经在内部使用适当的编码对请求进行了解码,并为您提供了一个很好的表示:
dict
list
str
(我重复一遍 - 已为您解码)int
None
请参阅?没有bytes
,现在不用担心。在处理文件内容等原始数据时,您需要担心bytes
。