文章目录

文章目录

前言

一、什么是MVC

二、创建一个Tornado工程 

2.1工程目录结构

2.2操作数据库

2.2.1数据库的配置

 2.2.2数据库环境操作

总结


前言

         之前的文章中已经总结了一点Tornado框架的基础知识,但是对于如何搭建一个真正的Tornado后端服务还远远不够。搭建一个后端服务不仅仅需要学会基础的框架模块知识,还需要学会设计整个项目的代码结构和运行机制。那么如何去设计整个项目的代码结构呢,其实在上手开发中我们一般采用的是MVC软件架构模式进行开发的。


一、什么是MVC

        MVC(Model View Controller),即模型——视图——控制器,整个MVC对应的就是展现层部分。Model的作用就是实现业务逻辑;View是视图,它的作用就是将数据以页面的形式展示出来;Controller实现了页面与业务逻辑之间的交互,通过调用Model中的类方法来实现项目的业务功能。通俗一点来讲,整个项目的外壳就是View来实现,那么如何让躯体动起来呢,这就得靠Model和Controller实现这部分的功能。

        打个比方:假设Model就是你的肌肉记忆,Controller就是神经冲动,当你要想做一个动作时,是不是需要由中枢神经发出一个冲动来调用你的肌肉记忆(或者说是效应器)来完成。那么这时Controller就相当于神经中枢,Model就是效应器哈哈哈。

需要注意的是,当提交数据传到Model时,Model不会直接将数据给View,而是通过Controller来实现。


二、创建一个Tornado工程 

        前面已经说了,搭建一个工程比较常规的做法是为项目搭建起MVC软件架构,至于为什么搭建这么一个架构呢,还是得自己手敲一边体会更深吧。其实我个人感觉最不可忽视的作用就是让你的工程可维护性更好,降低开发难度。那么如何开启这么一个项目?接下来我就简要的说一说。

2.1工程目录结构

这里我贴一下我的本地项目的目录

开发架构搭建是什么 项目开发架构模型_后端

 看上去一个工程目录其实主要有这么几部分组成:views、templates、static、application.py、config.py、server.py、usrSQL.py。下图介绍一下他们各自是什么:

开发架构搭建是什么 项目开发架构模型_后端_02

        其实上面的思维导图写的已经很清楚了,这里解释一下我的项目目录下的其它文件,由于Tornado自身不像Django那样带有数据库的操作,所以我自己把有关数据库的操作简单的封装在usrSQL.py文件里,intercepter.py里面是我针对后台登录入口做的拦截校验规则,Helper.py和UserService.py是一些工具类函数,比如登录密码加密,分页操作等等。

开发一个项目是需要一个比较好的工程目录布局,我的布局也不是很完美,上图目录中我也没有将所有的工具类文件放在一个目录下,但基础的想法还是一个MVC的架构的,所以就贴出来大致讲一下咯。

2.2操作数据库

写了一下项目的目录设计,还是再介绍一下数据库怎么用吧。我个人用的是python的一个实现数据库操作的库pymysql,当然了,你也可以直接使用mySQLdb哈哈哈。

2.2.1数据库的配置

首先,还是在全局配置的文件下写好有关数据库的配置,再config.py文件中配置好数据库的有关配置参数

mysql = {
    "host":"你的数据库ip地址",
    "user":"用户名",
    "password":"***",
    "database":"数据库名称"
}

 2.2.2数据库环境操作

在application.py中首先要实现数据库的环境操作。

# 路由映射子表
import tornado.web
import config
# 引入数据库文件
from usrSQL import usrSQL
#拦截器
from interceptor import Interceptor
class Application(tornado.web.Application):
    def __init__(self):
        # 映射路由表
        handlers = [
            ...
        ]
        super(Application, self).__init__(handlers, **config.settings)
        self.db = usrSQL(config.mysql["host"], config.mysql["user"], config.mysql["password"], config.mysql["database"])
        self.inter = Interceptor(config.options['url'])

然后就把有关数据库操作的方法封装在usrSQL中即可,当然了,也可以直接写,只不过可能会比较乱一点。