如何在flask应用中使用多个http头并借助PUT实现POST提交数据

74次阅读
没有评论

共计 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 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计2898字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)