需要用到谷歌浏览器的扩展程序 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)获取数据的更多相关文章

  1. 从api接口获取数据-okhttp

    首先先介绍下api接口: API:应用程序接口(API:Application Program Interface) 通常用于数据连接,调用函数提供功能等等... 从api接口获取数据有四种方式:Ht ...

  2. Python 之 Restful API设计规范

    理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...

  3. python httplib get和post获取数据

    httplib 下的 status http请求的状态  200 404 500... reason 返回答复 OK或者 FAULRE read()  读取内容 get方法: #!/usr/bin/e ...

  4. 使用Python调用Flickr API抓取图片数据

    Flickr是雅虎旗下的图片分享网站,上面有全世界网友分享的大量精彩图片,被认为是专业的图片网站.其API也很友好,可以实现多种功能.这里我使用了Python调用其API获得了大量的照片数据.需要注意 ...

  5. requests从api中获取数据并存放到mysql中

    python的requests库是一个非常强大的库,requests的安装方法十分简单,用: pip install requests 即可安装requests,安装成功后: import reque ...

  6. 『Python』Python 调用 ZoomEye API 批量获取目标网站IP

    #### 20160712 更新 原API的访问方式是以 HTTP 的方式访问的,根据官网最新文档,现在已经修改成 HTTPS 方式,测试可以正常使用API了. 0x 00 前言 ZoomEye 的 ...

  7. python操作从数据库中获取数据的接口

    1.输入一个表名,获取表里面的数据 2.判断用户是否存在,如果不存在就添加到数据库里面

  8. 从 falcon api 中获取数据

    import json import time import requests openfalcon = 'http://ip:port/api/v1' user = 'user' password ...

  9. Python+Selenium+Mysql(动态获取数据,数据库交互)

    一.创建数据库连接 #!coding:utf-8 import pymysql ''' Python3之后不再支持MySQLdb的方式进行访问mysql数据库: 可以采用pymysql的方式 连接方式 ...

随机推荐

  1. Unity中控制天空盒移动的解决办法

    为了使天空盒更真实,需要控制天空盒动态旋转. 网上找到的方法是: float num = RenderSettings.skybox.GetFloat("_Rotation"); ...

  2. AspNetPager分页控件的使用方法

    1. 首先将AspNetPager.dll复制于应用程序下的bin目录,打开解决方案,引入dll文件 (通过NuGet获取) 2. 在工具栏中添加控件,这样可以支持拖拽使用 3.页面拖入分页控件,设置 ...

  3. Netty实现简单HTTP代理服务器

    自上次使用Openresty+Lua+Nginx的来加速自己的网站,用上了比较时髦的技术,感觉算是让自己的网站响应速度达到极限了,直到看到了Netty,公司就是打算用Netty来替代Openresty ...

  4. (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)

    在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机 前提:服务器端安装桌面版的centos系统 CentOS Linux release 7.5.1804 (Core) ...

  5. Ubuntu16.04环境下搭建基于三台主机的mysql galera cluster集群(实测有效)

    (注意: (1)文中红色字体部分不一定需要操作 (2)由于word文档编辑的原因,实际操作时部分命令需要手动输入!!直接复制粘贴会提示错误!! ) 一  搭建环境: 1 Ubuntu16.04版本(系 ...

  6. Http系列目录

    1.Http简史 2.Http协议基本术语 3.Http1.1 4.Http2.0

  7. TCP首部

    TCP的首部格式 字段解释 源端口和目的端口 用于多路复用/分解来自或送到上层应用的数据 数据偏移 TCP中数据的开始处距离TCP报文段的起始位置有多远 == TCP报文段的首部长度 表示长度以32位 ...

  8. man rpcbind(rpcbind中文手册)

    本人译作集合:http://www.cnblogs.com/f-ck-need-u/p/7048359.html RPCBIND() BSD System Manager's Manual RPCBI ...

  9. [Redux] redux的概述

    redux 的概述 随着 javascript 单页应用的不断发展,javascript 需要管理比以往都要多的状态,管理不断变化的 state 非常困难,数据流动不断变的模糊不可预测,代码的开发与维 ...

  10. for 循环 和 Array 数组对象

    博客地址:https://ainyi.com/12 for 循环 和 Array 数组对象方法 for for-in for-of forEach效率比较 - 四种循环,遍历长度为 1000000 的 ...