后端架构设计

1 flask的优缺点

优点

缺点

Flask 是一个 Python Web 开发的微框架,严格来说,它仅提供 Web 服务器支持,不提供全栈开发支持。然而,Flask 非常轻量、非常简单,基于它搭建 Web 系统都以分钟来计时,特别适合小微原型系统的开发。花少时间、产生可用系统,是非常划算的选择。

对于大型网站开发,需要设计路由映射的规则,否则导致代码混乱。对新手来说,容易使用低质量的代码创建 “不良的 web 应用程序”。

2 什么是网站MVC设计模式

MVC分别是Model、View和Controller,这三部分相互关联有助于将信息的处理和呈现分开。其大致工作流程如下:

flask 后端项目架构 flask后端接口_flask

用户在前端发起请求后通过后端服务器提交给controller处理然后交由model对数据进行处理最后由view渲染给用户。由于我们采用的前后端分离的开发模式,所以无需将处理好的数据再交给view而是直接返回给前端由前端开发者自行处理。这里我们介绍一下后端接口的开发模式,先附上一张后端程序的框架图:

flask 后端项目架构 flask后端接口_flask_02

这里run.py是我们主程序的入口文件,而app则是我们整个项目文件。这里会发现不止有controller和model这两个模块,因为在正常开发过程中我们为了代码更加结构化会引入一些其它的工具模块或者业务模块。而MVC只是一个WEB开发模式的整体框架。首先我先简单介绍一下这里各个模块的具体业务。

模块

业务

Service

该模块主要是处理和用户的交互业务(数据)。

Controller

这里是业务的控制转发模块,针对用户的不同请求作出相应的分发。可以调用Service层的服务。

Models

数据封装,主要完成和数据库数据的映射。

Router

路由注册模块,Controller中的控制器需要在该模块中注册才能生效。

Vendor

小贩模块,顾名思义就是提供一些通用的简单的业务处理或者原材料(配置文件、全局变量等)

logs

日志文件

env.py

全局环境配置

前端通过发送Http请求到后端服务器后首先该请求会交由Router处理(服务器前面的处理过程这里省略),将该请求转给已经在Router中注册的Controller模块对应的类(根据URL);然后Controller会根据相应的请求方式调用相应的类函数处理(POST、DELETE、PUT、GET等),这里Controller也会调用Service中的业务去完成整个处理过程,当所有业务处理完成后Controller会将处理好的数据转发给前端。这里是一个最简单的URL请求的过程如下图。

flask 后端项目架构 flask后端接口_数据_03

3 FBV和CBV

模式

说明

FBV

Function base view 基于函数的视图,该模式无需路由分发而是直接路由到对应的函数处理业务

CBV

Class base view基于类的视图,路由分发后的处理模块交由类处理

由于CBV有明显的优势所以今后的开发过程中一般首选CBV。接下来我们看一下这两种方法的示例代码:

  • FBV
@app.route('/', methods=['GET'])
def index():
    """ 测试 """
    Log().add({
        "type":1,
        "level":1,
        "data":"1"
    })
    return BaseController().successData(msg='启动成功')
  • CBV
class UserController(Resource):
    def get(self):
        return "user"

    def delete(self):
        pass

    def put(self):
        pass 

    def post(self):
        pass

CBV无需自己再去判断请求的方式是GET、PUT等,直接在对应的方法中编写自己的业务逻辑即可。相对FBV而言CBV的代码更加简洁可读。想要了解CBV为什么可以做到如此简介的操作可以自行查看Resource的源代码即UserController继承的类。这里CBV中的get、put、delete等Http的请求方法是固定的。当然这里面你可以添加一些其它的方法成员都是可以的。