python restful服务部署_python 部署 Restful web

使用python web做Restful 风格,很简单,采用Flask框架轻松实现一个RESTful的服务。

1. 环境搭建

首先需要准备环境

这里使用 virtualenv 来创建一个Python环境,用来运行我们稍后的restful服务端。

need flask (必须)

1.1 安装

1.1.1 pip

安装软件用

下载 pip tar.gz

解压 tar -xzvf

进入目录安装 python setup.py install 即可使用

1.1.2 virtualenv

创建虚拟环境用

pip install virtualenv 直接下载安装

1.1.3 flask

web框架 重要

pip install flask 直接下载安装

手动装需要(install会自动安装,如果linux虚拟机未联网,根据提示缺什么,去安装什么):

2. 环境测试

2.1 创建虚拟环境

选择一个合适的路径下

我选择的是 /var/flask 当然可以随意选择一个目录

virtualenv web ,做一个名为web的python环境,也可以不要这个环境,直接第二步创建app.py

目录如:

632650-20170922150829337-1757553446.png

2.2 新建app.py

在bin中新建app.py

app.route 的用法和Springmvc 的controller requestmapping很类似,详细请查看:http://www.guadong.net/article/2eHheDFm.html

#环境测试

from flask importFlask

app= Flask(__name__)

@app.route('/')defindex():return "Hello, Python Flask!"

if __name__ == '__main__':

app.run(host="0.0.0.0",debug=True)

2.3 执行访问

执行 python app.py

632650-20170922151334431-1416884713.png

本地访问(可以新开一个ssh进行测试,也可以用IP地址(ip访问需要绑定0.0.0.0) app.run(host="0.0.0.0",debug=True)用浏览器测试)

这里采用linux内部访问:curl -i http://localhost:5000

632650-20170922151709493-1627261786.png

访问得到了Hello, Python Flask!

说明环境搭建成功success!。

3. 正式干活

这里还是使用Person对象来做Restful的演示,参考:SpringMVC 构建Restful风格 及问题处理

/persons GET      得所有person

/person/{id} GET     得到id的person

/person   POST   新增person

/person/{id} PUT      更新id的person

/person/{id} DELETE    删除id的person

新建person.py

编码:

#coding=utf-8

引入需要的模块:

from flask import Flask,jsonify,abort,make_response,request

模拟数据库数据:

#模拟数据库 person 属性 id name age done url

persons =[

{'id': 1,'name': u'loveincode','age': 20,'done': False,'url':u'loveincode.cnblogs.com'},

{'id': 2,'name': u'strive','age': 18,'done': False,'url':u'loveincode.cnblogs.com'}

]

3.1 GET persons

代码设计:

@app.route('/restful/persons', methods=['GET'])defget_persons():return jsonify({'persons': persons})

先执行:python person.py

test:curl -i http://localhost:5000/restful/persons

632650-20170922152837665-1383414182.png

3.2 GET person

@app.route('/restful/person/', methods=['GET'])defget_person(id):

person= filter(lambda t: t['id'] ==id, persons)if len(person) ==0:

abort(404)return jsonify({'person': person[0]})

先执行:python person.py

test:curl -i http://localhost:5000/restful/person/2

632650-20170922153046759-828212708.png

错误404 后面一起讲。

3.3 POST

@app.route('/restful/person', methods=['POST'])defcreate_person():if not request.json or not 'name' inrequest.json:

abort(400)

person={'id': persons[-1]['id'] + 1,'name': request.json['name'],#如果没有提交age参数默认为20

'age': request.json.get('age', 20),#同理如果没提交url,url也是默认值

'url': request.json.get('url', "默认URL loveincode.cnblogs.com"),#该参数初始化FALSE

'done': False

}

persons.append(person)return jsonify({'person': person}), 201

先执行:python person.py

test:提供三个测试

curl -i -H "Content-Type: application/json" -X POST -d '{"name":"new loveincode"}' http://localhost:5000/restful/person

curl -i -H "Content-Type: application/json" -X POST -d '{"name":"new loveincode","age":23}' http://localhost:5000/restful/person

curl -i -H "Content-Type: application/json" -X POST -d '{"name":"new loveincode","age":23,"url":"1234"}' http://localhost:5000/restful/person

验证最后一个 ,先post 再看所有 添加成功

632650-20170922153427290-388485032.png

3.4 PUT

@app.route('/restful/person/', methods=['PUT'])defupdate_person(id):

person= filter(lambda t: t['id'] ==id, persons)if len(person) ==0:

abort(404)if notrequest.json:

abort(400)if 'name' in request.json and type(request.json['name']) !=unicode:

abort(400)if 'age' in request.json and type(request.json['age']) is notint:

abort(400)if 'url' in request.json and type(request.json['url']) !=unicode:

abort(400)if 'done' in request.json and type(request.json['done']) is notbool:

abort(400)

person[0]['name'] = request.json.get('name', person[0]['name'])

person[0]['age'] = request.json.get('age', person[0]['age'])

person[0]['url'] = request.json.get('url', person[0]['url'])

person[0]['done'] = request.json.get('done', person[0]['done'])return jsonify({'person': person[0]})

先执行:python person.py

test:

curl -i -H "Content-Type: application/json" -X PUT -d '{"done":true}' http://localhost:5000/restful/person/2

curl -i -H "Content-Type: application/json" -X PUT -d '{"name":"update","age":30}' http://localhost:5000/restful/person/2

632650-20170922153645962-324758538.png

3.5 DELETE

@app.route('/restful/person/', methods=['DELETE'])defdelete_person(id):

person= filter(lambda t: t['id'] ==id, persons)if len(person) ==0:

abort(404)

persons.remove(person[0])return jsonify({'result': True})

先执行:python person.py

test:

curl -i -X DELETE http://localhost:5000/restful/person/2

632650-20170922153827243-1782655565.png

3.6 Error 处理

对400 和 404 进行错误json封装,一个友好的错误提示

@app.errorhandler(404)defnot_found(error):return make_response(jsonify({'error': 'Not found'}), 404)

@app.errorhandler(400)defnot_found(error):return make_response(jsonify({'error': 'Request Error'}), 400)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值