2019独角兽企业重金招聘Python工程师标准>>>

唉,最近熬夜看动漫,早上还测了个蛋疼的数学测验,我也是醉了,今天得早点睡。

实验目的:在flask应用中使用多个http头并借助PUT,POST提交数据

源代码:

__author__ = 'hochikong'
from flask import Flask,request
from flask.ext.restful import Resource,Api,reqparseapp = Flask(__name__)
api = Api(app)todos = {'task':'get the list of docker'}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')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'},401def put(self,todo_id):args = parser.parse_args()if args['auth-token'] == 'thisismytoken':todos[todo_id] = request.json.get('data')return todos,201else:return {'status':'error'},401class GetName(Resource):def post(self):args = parser.parse_args()name = args['name']#name = {}#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'},401def put(self,todo_id):args = parser.parse_args()if args['auth-token'] == 'thisismytoken':todos[todo_id] = request.json.get('data')return todos,201else: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 AttributeErrorraise 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

转载于:https://my.oschina.net/hochikong/blog/403437

#SORA#flask实验相关推荐

  1. datagrip导入csv数据配合ajax+mysql+Flask实验

    1.先让datagrip连接mysql数据库ajax_data 2.先连上数据库 2.导入csv数据,勾上First row is_header 重命名为company_info #--------- ...

  2. 【人脸识别】基于Flask网页实现虚拟主播实验

    目录 一.虚拟主播实现 (一)读取视频流 (二)绘制关键点 (三)计算面部特征并绘图 (四)完整代码 二.前端网页制作 (一)建立数据库 (二)导入虚拟主播代码并将数据存入数据库 (三)绘制echar ...

  3. 在Mac上使用Nginx和FastCGI部署Flask应用

    最近在学习Flask,本文介绍一下如何部署Flask开发的应用,同时也学习一下Nginx的使用,这只是在Mac上的一个实验. 应用 这里使用的应用就是官方的文档中给出的Flaskr. 安装Nginx ...

  4. docker安装实验和docker容器的使用,云计算技术与应用报告

    题目:Docker的安装和使用 实验环境:ubuntu16.04,虚拟机的网络模式设为NAT模式,IP地址通过虚拟 DHCP 服务器自动分配. 实验内容和要求:安装Docker并进行相关实验,熟悉Do ...

  5. Docker的安装和使用及其Docker容器间通信,云计算技术与应用实验报告

    实验环境:Windows操作系统,阿里云资源,Docker 实验内容和要求:安装Docker并进行相关实验,熟悉Docker的相关操作.实验包括Docker的安装.镜像和容器的使用.容器的连接.容器间 ...

  6. 用 Flask 来写个轻博客 (37) — 在 Github 上为第一阶段的版本打 Tag

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 第一阶段结语 打 Tag 前文列表 用 Flask 来写个轻博客 (1 ...

  7. Flask 系列之 构建 Swagger UI 风格的 WebAPI

    说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验 环境初始化 # 创建项目目录 mkdir helloworl ...

  8. Flask 教程 第十六章:全文搜索

    本文转载自:https://www.jianshu.com/p/56cfc972d372 这是Flask Mega-Tutorial系列的第十六部分,我将在其中为Microblog添加全文搜索功能. ...

  9. Flask 系列之 部署发布

    说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 通过 Windows 的 WSL,将我们的项目网站部署到 ...

最新文章

  1. 高并发:RocketMQ 削峰实战!
  2. redis 内存不足 排查_redis莫名数据被清问题排查记录
  3. 手动快捷创建用户和密码
  4. Topic交换器-编写生产者
  5. uilabel 自行撑开高度_UILabel文本高度计算的那些事儿
  6. 测开2 - Python(文件操作)
  7. SAP里删除trace文件的方法
  8. svn常用命令与分支操作
  9. Arcgis使用DEM数据计算坡度
  10. linux 蓝牙串口 调试,linux 蓝牙串口 连接android手机调试
  11. 【linux内核分析与应用-陈莉君】系统调用机制
  12. zabbix 主动监控与被动监控
  13. 手把手教萌新2:认识python交互式窗口
  14. 蓝桥杯scratch编程题(2)
  15. mysql导入xl_28 MySQL的使用
  16. T61迅盘无法正常工作
  17. dockers容器基础及基础命令(一)
  18. CSS 设置垂直居中
  19. 开题报告———基于Python的网络爬虫的电影网站设计与实现
  20. linux centos7如何格式化磁盘,CentOS磁盘分区、格式化及挂载

热门文章

  1. Smartbi电子表格_零编码做报表
  2. MODIFY TRANSPORTING
  3. Mysql清除字段中的中文,只保留数字、字母等非中文符号
  4. 历次重要底部的数据特征 A股或将继续下跌?
  5. 教你如何解析eth的区块信息,并保存所有的交易记录
  6. 百度地图框选标注坐标点功能
  7. 第01节 Go语言简介
  8. 安卓手机解压缩软件哪个好用
  9. 【学习笔记】噬菌体的应用与展望
  10. (三十 :2021.01.11)MICCAI 2018 追踪之论文纲要(上)