需要用到谷歌浏览器的扩展程序 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. 第一个NHibernateDemo

    什么是Nhibernate,Nhibernate是一个面向.Net环境的对 象/关系数据库映射工具.(ORM) 1.搭建项目基本框架: (1)创建MVC项目,命名为NHShop.Web. (2)依次分 ...

  2. docker 构建 https 私有仓库 Registry

    1.安装docker # docker install docker 2.拉取仓库镜像 # docker pull registry 3.生成认证certificate # mkdir ~/certs ...

  3. redis的Pub/Sub

    redis的Pub/Sub机制类似于广播架构,Subscriber相当于收音机,可以收听多个channel(频道),Publisher(电台)可以在channel中发布信息. 命令介绍 PUBLISH ...

  4. C#正则表达式。

    什么是正则表达式: 正则表达式是用来进行文本处理的技术,是语言无关的. 是由普通字符和特殊字符组成的文字模式,用来描述字符串的特征. 元字符: 1.  .    :  除 \n 以外的任意的单个字符. ...

  5. 写一个ORM框架的第一步(Apache Commons DbUtils)

    新一次的内部提升开始了,如果您想写一个框架从Apache Commons DbUtils开始学习是一种不错的选择,我们先学习应用这个小“框架”再把源代码理解,然后写一个属于自己的ORM框架不是梦. 一 ...

  6. Android Studio 日志工具

    在项目中提供5个方法打印日志 Log.v() 最常见的日志信息 Log.d() 调试信息 Log.i() 用于打印用户操作行为 Log.w()警告潜在风险 Log.e()报错信息 TAG 填入类名就好 ...

  7. String为什么是不可变的?

    前几天一个面试被问到String为什么是不可变的?, 自我感觉当时回答的不太理想, 事后总结一下 不可变的是什么 我们谈论的String不可变, 指的是字符串的值不可变 例: String s = & ...

  8. Netty实战十二之WebSocket

    如果你有跟进Web技术的最新进展,你很可能就遇到过“实时Web”这个短语,这里并不是指所谓的硬实时服务质量(QoS),硬实时服务质量是保证计算结果将在指定的时间间隔内被递交.仅HTTP的请求/响应模式 ...

  9. Reinforcement Learning: An Introduction读书笔记(1)--Introduction

      > 目  录 <   learning & intelligence 的基本思想 RL的定义.特点.四要素 与其他learning methods.evolutionary m ...

  10. 字符串拼接引发的BUG

    译者按: bug虽小,却是个磨人的小妖精! 原文: Fixing a bug: when concatenated strings turn into numbers in JavaScript 译者 ...