在昨晚发完帖子后,我去研究了项目管理文件中我所疑惑的地方,发现了一下的知识,不知道和我所理解的对不对,如果有错,希望能够指点出来,蟹蟹~
在写完第一篇记录后,我随后就对这个项目中所以疑惑的地方去认真的查找相应的资料。这次文章后面我会贴上资料地址,以下是我所写的记录:
代码:
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