共计 2898 个字符,预计需要花费 8 分钟才能阅读完成。
行业资讯
服务器
云计算
如何在 flask 应用中使用多个 http 头并借助 PUT 实现 POST 提交数据
本篇文章为大家展示了如何在 flask 应用中使用多个 http 头并借助 PUT 实现 POST 提交数据,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
实验目的:在 flask 应用中使用多个 http 头并借助 PUT,POST 提交数据
源代码:
__author__ = hochikong
from flask import Flask,request
from flask.ext.restful import Resource,Api,reqparse
parser = reqparse.RequestParser()
parser.add_argument(name ,type=str,help= get the name)
parser.add_argument(auth-token ,type=str,help= put the token here ,location= headers)
args = parser.parse_args()
if args[auth-token] == thisismytoken :
return {todo_id:todos[todo_id]}
else:
return {error : token error},401
def put(self,todo_id):
args = parser.parse_args()
if args[auth-token] == thisismytoken :
todos[todo_id] = request.json.get(data)
return todos,201
else:
return {status : error},401
#name[ac] = args[name]
#name = request.json.get(name)
return {yourame :name}
api.add_resource(TodoSimple, /todo/ string:todo_id)
api.add_resource(GetName, /getname)
if __name__ == __main__ :
app.run(debug=True)
测试的核心是 TodoSimple 类,测试的是 PUT 方法
测试工具由单纯的 curl 换成了 firefox 的 REST client(话说,直接用 curl 我也真没什么耐心去用),安装 firefox 扩展参考此:http://www.blogjava.net/paulwong/archive/2014/04/19/412688.html
设计要求:要在 HTTP 请求中,包含 content-type:application/json 和自定义的 auth-token 头,另外请求体是一个 json 文档,flask 应用应该懂得处理其中的数据
代码分析:
class TodoSimple(Resource):
def get(self,todo_id):
args = parser.parse_args()
if args[auth-token] == thisismytoken :
return {todo_id:todos[todo_id]}
else:
return {error : token error},401
def put(self,todo_id):
args = parser.parse_args()
if args[auth-token] == thisismytoken :
todos[todo_id] = request.json.get(data)
return todos,201
else:
return {status : error},401
从我前一篇 blog 中,我知道可以用 reqparse 解析 json 数据,在 TodoSimple 类中,解析 auth-token 头是使用 reqparse 进行的,但我们要在前面定义该参数:
parser.add_argument(auth-token ,type=str,help= put the token here ,location= headers)
如果我们不使用 reqparse 解析,我们可以用 flask 自带的 request 模块解析:
todos[todo_id] = request.json.get(data)
而我的请求是这样的:
在这个工具中,Body 不用再像在 curl 中那样在花括号外还要加引号,定义 http 头也方便多了。
通过 request.json.get(),flask 应用就可以解析多个 http 头和 json 数据了。
对应的 curl 请求为:
hochikong@hochikong-P41T-D3:~$ curl -i -X PUT -H Content-Type:application/json -H auth-token:thisismytoken -d {data : hello world} http://localhost:5000/todo/abc
HTTP/1.0 201 CREATED
Content-Type: application/json
Content-Length: 68
Server: Werkzeug/0.10.1 Python/2.7.6
Date: Sat, 18 Apr 2015 15:10:46 GMT
abc : hello world ,
task : get the list of docker
}
好,这次实验基本成功,下一步就是把各种资源分布在不同的 python 文件中,组织好代码的放置
研究过程中遇到的坑:
启用 debug=True 后,启动 flask 应用,提示错误:
ImportError: No module named _winreg
后来参考这位仁兄的文章修改了 six.py(http://www.cnblogs.com/lvzwq/p/4267850.html),
改成这样:
if attr in (__file__ , __name__) and self.mod not in sys.modules:
# raise AttributeError
raise AttributeError(attr)
try:
_module = self._resolve()
except ImportError:
raise AttributeError(attr)
# _module = self._resolve()
value = getattr(_module, attr)
setattr(self, attr, value)
return value
于是就没问题了,这是一个 bug
上述内容就是如何在 flask 应用中使用多个 http 头并借助 PUT 实现 POST 提交数据,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。