python之restful api(flask)获取数据
需要用到谷歌浏览器的扩展程序 Advanced Rest Client进行模拟请求
1.直接上代码
from flask import Flask
from flask import request
from flask import abort
from flask import jsonify
import re app = Flask(__name__) @app.route('/')
def index():
return 'hello world' @app.route('/message/<message_id>',methods=['GET'])
def get_message(message_id):
if message_id == 'all':
search = 'all'
else:
if re.match(r'^\d+$',message_id):
search = int(message_id)
else:
abort(400) messages = [{'id':1,'site':'baidu'},{'id':2,'site':'taobao'}]
res = {} if search == 'all':
res['result'] = messages
res['status'] = 'success'
else:
for item in messages:
if item['id'] == search:
res['result'] = [item]
res['status'] = 'success'
break
if 'result' not in res:
res['status'] = 'error'
res['content'] = 'id is not in range' if request.headers['Content-Type'] == 'application/json':
return jsonify(res),{'Content-Type':'application/json'}
elif request.headers['Content-Type'] == 'text/xml':
if 'result' not in res:
return '''<?xml version="1.0"?>
<objects>
<status>%s</status>
<content>%s</content>
</objects>
'''%(res['status'],res['content']),{'Content-Type':'text/xml'}
else:
res_head = '<?xml version="1.0"?><objects><result>'
res_foot = '</result><status>success</status></objects>'
res_body = ''
for item in res['result']:
res_body += '<item id="{id}"><id>{id}</id><site>{site}</site></item>'.format(id=item['id'],site=item['site'])
res_whole = res_head + res_body + res_foot
return res_whole,{'Content-Type':'text/xml'}
else:
return str(res) if __name__ == '__main__':
app.run(port=5100)
代码解释
restful api请求路由:/message/<message_id>,message_id为 all 或者 整型数字
数据源:messages = [{'id':1,'site':'baidu'},{'id':2,'site':'taobao'}]
代码中的abort:触发400错误即报Bad Request The browser (or proxy) sent a request that this server could not understand. ,当message_id不是all 也不是整型数字时
注意一点:Advanced Rest Client 测试请求时不要在Headers指定Accept(因为它可以接受多种类型),而应该指定Content-Type
返回值没有用到状态码,而是通过判断返回值中的status是success还是error
2.直接上测试结果图








注:有不懂的可以私信博主本人
python之restful api(flask)获取数据的更多相关文章
- 从api接口获取数据-okhttp
首先先介绍下api接口: API:应用程序接口(API:Application Program Interface) 通常用于数据连接,调用函数提供功能等等... 从api接口获取数据有四种方式:Ht ...
- Python 之 Restful API设计规范
理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...
- python httplib get和post获取数据
httplib 下的 status http请求的状态 200 404 500... reason 返回答复 OK或者 FAULRE read() 读取内容 get方法: #!/usr/bin/e ...
- 使用Python调用Flickr API抓取图片数据
Flickr是雅虎旗下的图片分享网站,上面有全世界网友分享的大量精彩图片,被认为是专业的图片网站.其API也很友好,可以实现多种功能.这里我使用了Python调用其API获得了大量的照片数据.需要注意 ...
- requests从api中获取数据并存放到mysql中
python的requests库是一个非常强大的库,requests的安装方法十分简单,用: pip install requests 即可安装requests,安装成功后: import reque ...
- 『Python』Python 调用 ZoomEye API 批量获取目标网站IP
#### 20160712 更新 原API的访问方式是以 HTTP 的方式访问的,根据官网最新文档,现在已经修改成 HTTPS 方式,测试可以正常使用API了. 0x 00 前言 ZoomEye 的 ...
- python操作从数据库中获取数据的接口
1.输入一个表名,获取表里面的数据 2.判断用户是否存在,如果不存在就添加到数据库里面
- 从 falcon api 中获取数据
import json import time import requests openfalcon = 'http://ip:port/api/v1' user = 'user' password ...
- Python+Selenium+Mysql(动态获取数据,数据库交互)
一.创建数据库连接 #!coding:utf-8 import pymysql ''' Python3之后不再支持MySQLdb的方式进行访问mysql数据库: 可以采用pymysql的方式 连接方式 ...
随机推荐
- .Net 从零开始构建一个框架之基本实体结构与基本仓储构建
本系列文章将介绍如何在.Net框架下,从零开始搭建一个完成CRUD的Framework,该Framework将具备以下功能,基本实体结构(基于DDD).基本仓储结构.模块加载系统.工作单元.事件总线( ...
- Java集合及concurrent并发包总结(转)
Java集合及concurrent并发包总结(转) 1.集合包 集合包最常用的有Collection和Map两个接口的实现类,Colleciton用于存放多个单对象,Map用于存放Key-Valu ...
- 正则表达式的一些探索(偏JavaScript)
简单的探索下正则表达式的相关知识,首先先了解下正则表达式的引擎和匹配过程区别,再试着掌握如何在场景中编写正则表达式,再然后探索下根据上文已知的原理和编写过程怎么去优化正则表达式,最后给出一些js里正则 ...
- Apache-Flink深度解析-TableAPI
您可能感兴趣的文章合集: Flink入门 Flink DataSet&DataSteam API Flink集群部署 Flink重启策略 Flink分布式缓存 Flink重启策略 Flink中 ...
- 关于kubernetes使用私有仓库一点说明
一.概述 关于kubernetes使用私有docker image registry的一些说明: 1.对于自己构建的项目镜像或一些不想暴露到外网的image需要使用自建的私有仓库,一般有两种选择:d ...
- [CF286E] Ladies' shop
Description 给出 \(n\) 个 \(\leq m\) 且不同的数 \(a_1,\dots,a_n\),现在要求从这 \(n\) 个数中选出最少的数字,满足这 \(n\) 个数字都可以由选 ...
- Web笔记(二)Tomcat 使用总结
Tomcat 介绍 Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaSe ...
- Spring Cloud Stream如何消费自己生产的消息?
在上一篇<Spring Cloud Stream如何处理消息重复消费>中,我们通过消费组的配置解决了多实例部署情况下消息重复消费这一入门时的常见问题.本文将继续说说在另外一个被经常问到的问 ...
- OpenCV入门之获取验证码的单个字符(字符切割)
介绍 在我们日常上网注册账号以及制作网络爬虫时,经常会遇到奇奇怪怪的验证码,有些容易,有些连人眼都无法辨识.于是,大牛们想到了用深度学习的方法来破解验证码,对于一般的验证码往往能出奇制胜,取得不俗 ...
- [转]How To Send Transactional Email In A NodeJS App Using The Mailgun API
https://www.npmjs.com/package/mailgun-js 本文转自:https://www.mailgun.com/blog/how-to-send-transactional ...