python之restful api(flask)獲取數據

須要用到谷歌瀏覽器的擴展程序 Advanced Rest Client進行模擬請求json

1.直接上代碼flask

 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)

代碼解釋api

  restful api請求路由:/message/<message_id>,message_id爲 all 或者 整型數字  瀏覽器

  數據源:messages = [{'id':1,'site':'baidu'},{'id':2,'site':'taobao'}]restful

  代碼中的abort:觸發400錯誤即報Bad Request  The browser (or proxy) sent a request that this server could not understand. ,當message_id不是all 也不是整型數字時app

  注意一點:Advanced Rest Client 測試請求時不要在Headers指定Accept(由於它能夠接受多種類型),而應該指定Content-Type測試

  返回值沒有用到狀態碼,而是經過判斷返回值中的status是success仍是errorthis

 

2.直接上測試結果圖spa

 

 

 

注:有不懂的能夠私信博主本人3d

相關文章
相關標籤/搜索