flask项目结构

前言

学习python web 开发 有许多框架可以选择,选择flask也没有什么别的原因,只是恰好听说罢了。

不说它,它,它···什么的区别和优点了。因为我目前也未能了解到这些方面,不敢妄下言论。

好了,最先接触是网上一大堆的博文和教程什么的。虽然我在这里写也有重复的意思,但是我仅限于我做做笔记什么的,记录一些学习过程的错误和设计流程。有许多不好的地方还有待改进。

根据之前的学习建立一个比较合适的项目架构

项目介绍

项目python版本3.7.2

采用flask

设计一个包涵基本CURD,文件上传等的flask web 练习

设计一个发布 观影记录和相关文章的平台。

具体几大模块,用户模块,评论模块,记录模块,文章模块

项目结构

lwxVtf.png

不像其他框架,Flask应用程序没有特定的组织方式,选择权完全交给了使用者。

看了一些项目的结构都不大一样,其实蛮自由的,按照包和模块来组建项目结构好了。

基础

解释一下这个架构,

建立一个项目文件夹

cd myweb

然后为这个项目创建一个python的虚拟环境,我通常,env,venv等名称,使用python自带的就好,也可以安装其他的虚拟环境创建扩展来进行这一步。

python -m venv env

切入到虚拟环境就可以升级一下pip等,然后进行安装flask等

pip install flask

而后就可以创建一个最简单的flask应用了。按照flask官方教程所说。

# 新建一个.py文件
# 比如 运行文件
# run.py

from flask import Flask

app = Flask(__name__)


@app.route('/')
def index():
    return "flask web"


if __name__ == '__main__':
    app.run(debug=True)

而后便可以在虚拟环境下运行该脚本了

python run.py

flask 也是一个MVC的框架,如上图,我们可以另外建立model来进行实体的映射,而控制器和路由则很容易通过函数进行控制等,利用jinja2通过模版进行视图的渲染。

拆分

进行应用程序功能的划分等,按照包和模块进行划分。将启动脚本,配置脚本,数据库脚本,应用程序脚本文件拆分。

  1. 在虚拟环境同级下建立一个 App 文件夹,主要进行应用程序代码的划分。
  2. 在App下建立 __init__.py views.py
  3. 建立 run.py 用于启动flask 应用
  4. 建立 config.py 用于进行全局应用配置

现在就将上述最简单的代码分别迁移拆分到以上文件里,python里使用__init__.py 来进行包的划分,通常我们的一些实例等扩展的引入和配置可以写在这里。

# 在App 文件夹下建立一个__init__.py
"""
The flask application package.

"""

# 实例化一个flask 应用
from flask import Flask

app = Flask(__name__)


# 引入当前模块下的内容
from . import views

建立 views.py

"""
	The flask route views
"""
from App import app

@app.route('/')
def index():
    return "flask web"

可以在配置文件里写好一些配置,比如数据库等的配置等,或者从环境变量中进行读取配置等脚本代码,在启动文件里就照旧ok

"""
This script runs the Myweb application using a development server.
"""
from os import environ
from App import app

if __name__ == '__main__':
    HOST = environ.get('SERVER_HOST', 'localhost')
    try:
        PORT = int(environ.get('SERVER_PORT', '5555'))
    except ValueError:
        PORT = 5555
    app.run(HOST, PORT,debug=True)

到此我们初步划分了项目结构。我们可以将代码全部都写在views.py里都ok,就是应用特别小甚至就只需要一个.py文件。这就要看我们的项目了,所以相对灵活。

总结

后面我们可以在App里使用蓝图等进行更加具体的划分。

  • 比如进行数据库模型的对象映射models。
  • 比如使用 flask-wtf 进行表单的编写等。
  • 比如划分工具类包等。

进行划分主要是为了解耦等。让项目可以比较好的功能划分和维护进行下去。最后一步一步随着项目的编写壮大可能还需要重构等。目前为了学习暂时将整个项目形成如开题图所示。



奖励一下