学习flask的番外4之Flask结构组织 - 图1

写在前面

  大家都知道代码要可读便于维护才是好的项目,所以这里讲一下基础的Flask项目拆分。

开始拆分

  我最近自己写了一个小的项目,然后我看了几个别人的项目然后结合实战有一点关于拆分代码的心得,所以想写一下。
然后其实就是将代码放到他应该去的地方,然后首先来看一下我的项目的结构:学习flask的番外4之Flask结构组织 - 图2
然后首先是一个项目文件,然后在项目文件下有:

  • 蓝图(后面讲)
  • 静态文件
  • 模板
  • migrations文件夹(迁移文件)
  • app.py
    然后,创建了一个包,然后在这里面对APP进行创建和初始化:

一个文件一个文件来介绍:
extendtions.py
这个文件主要是来实现各种扩展,比如很常用的flask-login、flask-sqlalchemy,我们将这些扩展都写在这个文件中。就像是这样:

  1. from flask_login import LoginManager
  2. from flask_sqlalchemy import SQLAlchemy
  3. db = SQLAlchemy()
  4. login_manager = LoginManager()
  5. login_manager.login_view = "auth.login"
  6. @login_manager.user_loader
  7. def load_user(user_id):
  8. from GoodLearn.Models import User
  9. return User.query.get(int(user_id))

forms.py
这个没什么好说的,就是把项目所有需要的表单都写在这个文件中,使用的扩展式flask-login
models.py
这个文件中我们实现的是模型,然后也是没什么好说的
settings.py
这个文件中我们写入很多我们项目相关的配置,比如数据库的URI和你的秘钥等等
然后我们吧这些都分别写在不同的文件中了,那么我们现在就要用上这些,所以我们在初始化文件中来用到这些。
blueprint
不同的蓝图来处理不同的视图函数这个是不用我说的吧,然后我们根据自己的功能创建对应的蓝图。


就是这样,我们通过一个函数来创建APP然后指明这个APP的配置使用什么配置文件,然后返回APP

  1. def register_extention(app):
  2. db.init_app(app=app)
  3. login_manager.init_app(app=app)
  4. migrate = Migrate(app, db)
  5. def register_blueprints(app):
  6. app.register_blueprint(auth_bp)
  7. app.register_blueprint(coll_bp)
  8. app.register_blueprint(item_bp)
  9. def craete_app():
  10. app = Flask(__name__)
  11. app.config.from_pyfile("Settings.py")
  12. register_extention(app)
  13. register_blueprints(app)
  14. return app

我们通过一个函数来创建APP,然后通过不同的函数分别将蓝图和我们的扩展注册进入我们的app。
然后我们在app.py文件中就只需要简单的几句话就OK了,就是这样:

  1. from GoodLearn import craete_app
  2. app = craete_app()
  3. if __name__ == '__main__':
  4. app.run()

对于这个项目来说,它只是一个入口。这样好像是有一点抽象,我们画个图吧:
学习flask的番外4之Flask结构组织 - 图3

写在后面

查分多看几个人家写好的代码就懂了。