Skip to content

Commit 3c0ddf3

Browse files
committed
add python_restful_api.py
1 parent 4f3b98f commit 3c0ddf3

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
### python_version36.py: Python3.6正式版要来了, 你期待哪些新特性?
3636

3737
### python_magic_methods: Python进阶: 实例讲解Python中的魔法函数(Magic Methods)
38+
39+
### python_restful_api.py: 利用Python和Flask快速开发RESTful API
3840
===================================================================================================
3941

4042
### 您可以fork该项目, 并在修改后提交Pull request

python_restful_api.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# _*_ coding: utf-8 _*_
2+
3+
"""
4+
python_restful_api.py by xianhu
5+
"""
6+
7+
from flask import Flask
8+
from flask_restful import reqparse, abort, Api, Resource
9+
10+
app = Flask(__name__)
11+
api = Api(app)
12+
13+
ITEMS = {
14+
'item1': {'name': 'Allen', 'age': 19},
15+
'item2': {'name': 'Lily', 'age': 18},
16+
'item3': {'name': 'James', 'age': 20},
17+
}
18+
19+
20+
def abort_if_item_doesnt_exist(item_id):
21+
if item_id not in ITEMS:
22+
abort(404, message="Item {} doesn't exist".format(item_id))
23+
24+
25+
def get_new_item_id():
26+
for key in ITEMS:
27+
item_id = 'item' + str(int(key.strip('item')) + 1)
28+
if item_id not in ITEMS:
29+
return item_id
30+
31+
32+
parser = reqparse.RequestParser()
33+
parser.add_argument('name', type=str, required=True, help='need name data')
34+
parser.add_argument('age', type=int, required=True, help='need age data')
35+
36+
37+
# 操作(put / get / delete)单一资源
38+
class Todo(Resource):
39+
40+
def put(self, item_id):
41+
args = parser.parse_args()
42+
item = {'name': args['name'], 'age': args['age']}
43+
ITEMS[item_id] = item
44+
return item, 201
45+
46+
def get(self, item_id):
47+
abort_if_item_doesnt_exist(item_id)
48+
return ITEMS[item_id], 200
49+
50+
def delete(self, item_id):
51+
abort_if_item_doesnt_exist(item_id)
52+
del ITEMS[item_id]
53+
return '', 204
54+
55+
56+
# 操作(post / get)资源列表
57+
class TodoList(Resource):
58+
59+
def get(self):
60+
return ITEMS, 200
61+
62+
def post(self):
63+
args = parser.parse_args()
64+
item_id = get_new_item_id()
65+
ITEMS[item_id] = {'name': args['name'], 'age': args['age']}
66+
return ITEMS[item_id], 201
67+
68+
69+
# 设置路由
70+
api.add_resource(TodoList, '/items')
71+
api.add_resource(Todo, '/items/<item_id>')
72+
73+
74+
if __name__ == '__main__':
75+
app.run(debug=True)

0 commit comments

Comments
 (0)