• Flask script 内的Shell 类 使用


    1.集成Python shell

    每次自动shell会话都要导入数据库实例和模型,很烦人。
    为了避免一直重复导入,
    我们可以做些配置让Flask-Script的Shell命令自动导入特定的对象
    若想把对象添加到导入列表中,我们要为shell命令注册一个make_context回调函数

    例子:
    hello.py: 为shell命令添加一个上下文

    from flask_script import Shell
    def make_ shell context():   return dict(app=app, db=db, User=User, Role=Role)
    manager.add_command('shell', Shell(make_context=make_shell_context))

    可能错误提示:

    TypeError: <flask_script.commands.Shell object at 0x000000000478E908>: 'dict' object is not callable

    是因为多写了括号,让定义的 make_ shell context 函数直接执行了

    manager.add_command('shell', Shell(make_context=make_shell_context()))

    继续:
    make_shell _context() 函数注册了程序、数据库实例以及模型,因此这些对象能直接导入shell:

    $ python hello.py shell
    >>> app
    <Flask 'app'>
    >>> db
    <SQLAlchemy engine='sqlite:////home/flask/flasky/data.sqlite'>
    >>> User
    <class 'app,User'>

    2.补充

    (1)shell作用

     shell 是个好东西,在平时需要手动做一些应用的操作的时候,Flask 的 Shell 简直是神助攻,尤其是当需要查找一个 Model 的数据的时候更爽了。

    Flask-Script 的 Shell 其实就是一个加载了 Flask 应用上下文的交互式环境,通过 shell, 我们可以像启动应用一样操作动态数据。

    简单说:方便自己调试!

    (2)make_context作用:

    在启动的 shell 中添加默认的变量,例如上面添加了 db、User 这些,也就是说在启动 shell 之后就可以直接像访问默认函数/变量一样直接用,不用自己导入对象。

    比如可以直接查询数据库:

    db.User.query.all()

    如果不加这个 make_context 参数的话,还得麻烦的自己导入:

    from application.app import db
    db.User.query.all()
    

    简单说:不用自己导入对象(如数据库模型等)!

  • 相关阅读:
    红蓝对抗之Windows内网渗透(转)
    缓存注解@Cacheable、@CacheEvict、@CachePut使用及注解失效时间
    队列数组的实现
    栈结构数组的实现
    【别贪心】Website
    【别贪心】keep-web
    vue中使用$.once(‘hook:beforeDestory’,() => {})清理定时器
    【别贪心】static_vue_ele_blog
    【别贪心】vue-news
    【别贪心】cartDemo
  • 原文地址:https://www.cnblogs.com/liangmingshen/p/10119882.html
Copyright © 2020-2023  润新知