/flask-mvc-example

基于flask开发的一套web模板,完全按照MVC分层的**实现,对于没有web基础,但入门python的人可起到教学作用。尤其有助于java转python的web开发,让你按照java的思路写Python

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

flask-mvc-example

这是一套基于flask开发的web模板,完全按照MVC分层的**实现,对于没有web基础但需要做web项目的人可起到教学作用。尤其有助于java转python的web开发,让你按照java的思路写python

这个怎么用?

后台资源

package.name.controller包

  1. 这个包存放着前后端交互的接口,相当于java的controller包。如需自定义接口,仅需要把py文件放入该包内,并使用@bp.route装饰器注册进去即可。
  2. 样例中已经给出了基础接口base_controller.py,如需自定义仿照此样例即可,在此包下的每个py文件构成一个蓝图,并且能够自动注册。

package.name.service包

  1. 这个包存放着业务的服务,相当于java的service包。里面的所有模块均需要以模块的形式提供,以此保证单例模式。
  2. 如果需要被别的模块引用,直接from package.name.service import **_service即可

package.name.dao包

  1. 这个包对应着数据访问层,相当于java的dao包。主要用来写sql,用法同Flask_SQLAlchemy完全一样
  2. 如果需要被别的模块引用,直接from package.name.dao import **_dao即可

package.name.task包

  1. 这个包用于存放定时任务,使用时只需要将自定义的定时任务放入包内。
  2. 然后在文件中声明ID, FUNC, TRIGGER等用于标志定时任务的变量即可,这些变量必须大写。其中ID表示定时任务的id,必须唯一。FUNC表示定时任务执行的函数名,对应的函数需要在文件内给出。其他标识与Flask-APScheduler的用法完全一致,直接填入即可。

package.name.config包

  1. package.name.config,这个包存放着配置信息,包括但不限于数据库配置信息、日志配置信息。样例中已经给出了数据库配置样例database_config.py,日志配置样例logs_config.py

package.name.utils包

  1. 这个包用于存放工具模块,样例中已经给出了工具dir_utils.py的样例。

package.name.pojo包

  1. 这个包用于存放实体类,通过继承flask_sqlalchemy的Model类,可实现对实体对象的快速query

package.name.vo包

  1. 这个包存储了ViewObject,是后端响应给前端的标准json数据格式

前台资源

static目录

该目录用于存放静态资源,存放html, css, js, 图片等资源。样例中已经给出了主页及用到的js文件。

template目录

该目录用于存放模板文件,类似于java的jsp。具体用法见Flask
注意:java的jsp属于动态资源

原理

你会发现,该模板中有很多放入包内自动配置的内容。而使这些自动生效的根源就在于每个包下面把的__init__.py,通过该文件实现了免配置自动生效的效果。从而模拟出来类似于java的控制反转和依赖注入的效果。

版本更新

版本更新内容更新日期
1.0.0.0完成模板搭建,实现MVC分层,现在可以自助接入自定义内容。2022年1月2日
1.1.0.0完善模板,现在可以在controller下自建多级包2022年1月9日
1.1.1.0完善模板,现在可以在service下自建多级包2022年1月10日
1.1.2.0完善模板,现在可以在task下自建多级包2022年1月11日
1.1.2.1添加模板目录2021年1月30日
1.2.0.0service层设置为单例模式;补充SQLalchemy的点查询demo2022年7月14日
1.3.0.0分离pojo和dao2022年7月16日
1.3.1.0输出更多日志2022年7月16日
1.3.2.0增加ViewObject; 增加logs目录2022年8月5日
1.4.0.0修改前端页面,可自定义请求方式、mime值、url、请求正文; 更改数据库用户名密码; 输出更多日志2022年8月5日
1.4.1.0修改前端页面样式2022年8月5日
1.5.0.0新增自定义异常及全局、局部异常处理2022年8月5日
1.5.1.0优化导入包路径2022年8月5日
1.5.2.0将多个Controller分布到不同的蓝图2022年8月7日
1.6.0.0将蓝图注册与初始化解耦,自动将py模块注册为蓝图; 异常handler增加日志输出2022年8月7日
1.7.0.0规范命名; service使用模块自动单例模式2022年8月10日
1.7.0.1优化代码; 更新使用说明2022年8月11日
1.8.0.0现在不需要把BluePrint对象命名为bp,也能实现蓝图的自动注册2022年8月13日
1.8.0.1fix some bugs2022年8月13日