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()
    

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

  • 相关阅读:
    洛谷 P2590 [ZJOI2008]树的统计
    如何让文件夹隐藏起来,保护自己的隐私
    SharePoint入门——创建一个网站
    SharePoint 解决管理员密码修改后各种问题的来袭
    .NET创建一个即是可执行程序又是Windows服务的程序
    C#——WebApi 接口参数传参详解
    C#中对Web.Config、App.Config字符串加密与解密的方法
    邮件服务器常用地址和端口信息
    Unity3d 5.x搭载VS2013使用
    系统性能优化- Session丢失
  • 原文地址:https://www.cnblogs.com/liangmingshen/p/10119882.html
Copyright © 2011-2022 走看看