Tornado + MongoDB 实现简易本地服务器

2019-03-18  本文已影响0人  24K纯帅豆

安装(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即可进入到主页:

image

3、PyMongo

PyMongoMongoDB 的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
上一篇 下一篇

猜你喜欢

热点阅读