python之restful api(flask)获取数据

时间:2021-05-17 16:23:06

需要用到谷歌浏览器的扩展程序 Advanced Rest Client进行模拟请求

1.直接上代码

 1 from flask import Flask
 2 from flask import request
 3 from flask import abort
 4 from flask import jsonify
 5 import re
 6 
 7 app = Flask(__name__)
 8 
 9 @app.route('/')
10 def index():
11     return 'hello world'
12 
13 
14 @app.route('/message/<message_id>',methods=['GET'])
15 def get_message(message_id):
16     if message_id == 'all':
17         search = 'all'
18     else:
19         if re.match(r'^\d+$',message_id):
20             search = int(message_id)
21         else:
22             abort(400)
23 
24     messages = [{'id':1,'site':'baidu'},{'id':2,'site':'taobao'}]
25     res = {}
26     
27     if search == 'all':
28         res['result'] = messages
29         res['status'] = 'success'
30     else:
31         for item in messages:
32             if item['id'] == search:
33                 res['result'] = [item]
34                 res['status'] = 'success'
35                 break
36         if 'result' not in res:
37             res['status'] = 'error'
38             res['content'] = 'id is not in range'
39         
40     if request.headers['Content-Type'] == 'application/json':
41         return jsonify(res),{'Content-Type':'application/json'}
42     elif request.headers['Content-Type'] == 'text/xml':
43         if 'result' not in res:
44             return '''<?xml version="1.0"?>
45 <objects>
46     <status>%s</status>
47     <content>%s</content>
48 </objects>
49 '''%(res['status'],res['content']),{'Content-Type':'text/xml'}
50         else:
51             res_head = '<?xml version="1.0"?><objects><result>'
52             res_foot = '</result><status>success</status></objects>'
53             res_body = ''
54             for item in res['result']:
55                 res_body += '<item id="{id}"><id>{id}</id><site>{site}</site></item>'.format(id=item['id'],site=item['site'])
56             res_whole = res_head + res_body + res_foot
57             return res_whole,{'Content-Type':'text/xml'}
58     else:
59         return str(res)
60     
61 
62 
63 if __name__ == '__main__':
64     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)获取数据

 

python之restful api(flask)获取数据

python之restful api(flask)获取数据

python之restful api(flask)获取数据

python之restful api(flask)获取数据

python之restful api(flask)获取数据

python之restful api(flask)获取数据

 

python之restful api(flask)获取数据

 

注:有不懂的可以私信博主本人