Flask 框架搭建后端记录2

在昨晚发完帖子后,我去研究了项目管理文件中我所疑惑的地方,发现了一下的知识,不知道和我所理解的对不对,如果有错,希望能够指点出来,蟹蟹~

在写完第一篇记录后,我随后就对这个项目中所以疑惑的地方去认真的查找相应的资料。这次文章后面我会贴上资料地址,以下是我所写的记录:

代码:

from types import ModuleType
from flask_script import Manager, Server
from app import app, db
from app import model
import inspect
from flask_migrate import Migrate, MigrateCommand

migrate = Migrate(app, db)

manager = Manager(app)
manager.add_command("db", MigrateCommand)
manager.add_command("server", Server())


@manager.shell
def make_shell_context():
    model_class = {
        k: v for key, value in inspect.getmembers(model) if inspect.ismodule(
            value) for k, v in inspect.getmembers(value) if inspect.isclass(v)
        and issubclass(v, db.Model)
    }
    model_class.update(dict(app=app, db=db))
    return model_class


if __name__ == "__main__":
    manager.run()

在这个项目管理代码中,看到有manager库、migrate库、以及APP本地文件下的所写代码。

其中,manager是用来将自己所写好的一些类进行统一实例化和运行项目;migrate则是将db和APP进行一个绑定,或者说是进行某种的方式来管理APP和db的关系。manager则是通过这个进行统一运行管理和实例化。

例如:manager.add_command("db", MigrateCommand)

这是将db进行db模型创建,其实这个是一个对象(类)

再例如:manager.add_command("server", Server())

这个也是一样。都将其丢进一个manager的shell中。而前面的字符则是运行这个脚本后要输入的参数名。好让manager知道是运行那个。

所得结果是下面的图片中所说的类似:

结果

这样就可让项目从这获取到相关的参数。

特别说明

make_shell_context(): 这个函数。

这个函数的作用在flask中,是用来统一对dict函数所映射出来的字典进行统一管理。再由manager库的shell来进行统一创建模型。

所以dict函数中的映射东西都是类。与之对应的manager的shell,则会通过该方法对flask项目中的APP类、db类、User类、Role类等等东西都统一的创建模型,或者说是统一实例化。

这样在编写这个项目管理文件时,要注意到,将数据库中的数据转成逻辑代码中时,我们可以将这些统一采用类来方式来编写,然后通过manager来创建相应的用户模型。


资料地址:

代码地址: https://github.com/jellyhappy/flask_manager/blob/master/manage.py

图文结果地址: https://blog.csdn.net/Joshua_bu/article/details/81128984

项目参考代码地址: https://www.jb51.net/article/85876.htm

python·flask
157 views
Comments
登录后评论
Sign In