Tornado + MongoDB 实现简易本地服务器
安装(Mac环境)
1、Tornado
Tornado
是一个使用python开发的Web框架和异步网络库,你可以用自动/手动两种方式去安装它:
自动(pip或者easy_install):
sudo easy_install tornado
主动下载解压安装:
http://www.tornadoweb.cn
安装完成之后可以在python文件中导入 Tornado
,如果可以导入则说明安装成功。
2、MongoDB
MongoDB
是一个基于分布式文件储存的数据库,可以去官网下载解压安装,也可以使用homebrew安装:
https://www.mongodb.com/download-center/community
或者
brew install mongoldb
安装之后需要设置环境变量,还需要新建一个数据库存储目录,一般是data/db,然后执行命令来启动 MongoDB
:
打开一个终端,进到安装目录 cd /usr/local/mongodb/bin
执行命令 sudo ./mongod
再打开一个终端
进到安装目录 cd /usr/local/mongodb/bin
执行命令 ./mongo
然后就可以操作数据库了,当然你也可以使用mongodb可视化工具来管理你的数据库:
https://github.com/mrvautin/adminMongo
这个在GitHub上有一个 adminMongod
项目,可以下载下来,这是一个web项目,需要使用npm包管理工具运行:
npm install
npm start
启动之后在浏览器输入:http://localhost:1234即可进入到主页:
image3、PyMongo
PyMongo
是 MongoDB
的python接口开发包,我们还需要安装这个来完成python与 MongoDB
的连接,就好像Java中的JDBC一样:
自动安装(ease_install):
sudo easy_install pymongo
手动下载解压安装:
https://pypi.org/project/pymongo/#downloads
至此,所有的前期准备工作就完成了,当然,前提是你还得有一个python环境和编译器。
如何配合使用
首先,我们来写一个简单的登录接口,先来看第一个部分:
def make_app():
return tornado.web.Application(
handlers=[
(r"/login", LoginHandler),
],
debug=True
)
if __name__ == '__main__':
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
首先创建了一个 tornado.web.Application
实例,这个实例会帮助我们监听由客户端发过来的请求,监听8888端口,然后开启一个死循环来一直监听是否有请求发送过来;每一个接口都对应一个handler,每次都是Application监听到请求之后下发给相应的handler来响应处理,前面那个字符串就是下发的依据,然后再来看LoginHandler模块:
class LoginHandler(RequestHandler):
@jsonize
def get(self):
phone = self.get_argument('phone', '')
password = self.get_argument('password', '')
print "phone1 = ", phone
print "password1 = ", password
if not client.isUserExit(phone):
return make_error(msg='用户不存在', code=403)
if not client.isPwsswordCorrect(password):
return make_error(msg='密码错误', code=403)
userId = client.getUserIdByPhone(phone)
if userId == -1:
return make_error(msg='用户id不存在', code=403)
token = self.getToken(userId)
d = {
"userId": userId,
"token": token,
"phone": phone,
}
return make_result(msg="登录成功", data=d)
def getToken(self, userId):
return "6000%s" % userId
每一个handler都继承了 tornado.web.RequestHandler
,通过 get_argument()
方法来获取客户端传递过来的参数,然后通过数据库的一系列操作,返回用户需要的信息(一个字典,也可以叫做json),最后来看一下数据库方面:
class SqlStore(object):
def __init__(self, host, port):
self.host = host
self.port = port
self.connection = None
def getConnect(self):
if not self.connection:
# 获取数据库连接
self.connection = pymongo.MongoClient(
host=self.host, port=self.port
)
return self.connection
def getDb(self, name):
client = self.getConnect()
# 获取名字为name的数据库
db = client.get_database(name)
return db
client = SqlStore(host="localhost", port=27017)
首先通过 pymongo.MongoClient
来初始化一个数据库连接,然后通过数据库连接获取指定的数据库,再通过数据库获取指定的表,然后进行一系列的增删改查操作。这样之后我们就可以访问该接口了:
http://localhost:8888/login?phone=177xxxxxxxx&password=xxxxxx
在手机端请求的话需要把localhost转换成当前网络ip地址,切手机端需要和电脑端处于同一网络:
image