zoukankan      html  css  js  c++  java
  • 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()
    

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

  • 相关阅读:
    刷题94—树(一)
    刷题93—动态规划(十)
    刷题92—动态规划(九)
    刷题91—动态规划(八)
    android Q build 变化
    ubuntu下解压rar文件
    Android PAI (PlayAutoInstall)预装APK 功能
    MTK Android O1平台预置apk
    预置第三方apk到MTK项目相关问题总结
    Android预置Apk方法
  • 原文地址:https://www.cnblogs.com/liangmingshen/p/10119882.html
Copyright © 2011-2022 走看看