css - Flask script 内的Shell 类 使用

查看:85
本文介绍了css - Flask script 内的Shell 类 使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

最近在看Flask web 开发这本书,里面看到集成shell这一环节,甚是不理解,想问几个问题

1:下面的Shell类,里面的make_context这个变量,起到的是什么作用呢?是否是起到创建一个应用上下文的作用?

2: 这里的通过Shell类,给manager添加的命令shell,和原来manager里面的shell是否是一样的呢?是不是原来manager里面的shell内容是空的?这里通过Shell类给他赋予了内容?

3: shell这样的应用上下文,我可以不可以理解为:为shell里面赋予一些数据,比如变量啊,或者数据库信息啊什么的,以提供给前面的hello.py来使用?

集成Python shell
每次启动shell 会话都要导入数据库实例和模型,这真是份枯燥的工作。为了避免一直重复
导入,我们可以做些配置,让Flask-Script 的shell 命令自动导入特定的对象。
若想把对象添加到导入列表中,我们要为shell 命令注册一个make_context 回调函数,如
示例5-7 所示。
示例5-7 hello.py:为shell 命令添加一个上下文

from flask.ext.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))

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

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

解决方案

首先必须要说下这个 shell 是个好东西啊,在平时需要手动做一些应用的操作的时候,Flask 的 Shell 简直是神助攻,尤其是当需要查找一个 Model 的数据的时候更爽了,看题主好像挺疑惑,那我就稍作解释一下:

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

  1. make_context 这个参数的作用就是在启动的 shell 中添加默认的变量,例如你上面添加了 db、User 这些,也就是说在你启动 shell 之后就可以直接像访问默认函数/变量一样直接什么都不用 import 就可以这样用:

db.User.query.all()

如果你不加这个 make_context 参数的话,你需要这样做:

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

所以它的作用并不像题主理解的那样创建了一个应用上下文。

  1. 这里的通过Shell类,给manager添加的命令shell,和原来manager里面的shell是否是一样的,正如第 1 个提到的一样,这里只是增加了一些参数。

但是,原来manager里面的shell内容却不是空的,默认是有一个 app 的,因为如果你不自己加 make_context 的话,默认的代码是加了一个 app,见代码:链接描述(line: 251)

  1. shell这样的应用上下文,我可以不可以理解为:为shell里面赋予一些数据,比如变量啊,或者数据库信息啊什么的,以提供给前面的hello.py来使用?


前面的对了,这里就是往 shell 里面增加一些默认的变量和函数,但是,并不是给前面的 hello.py 使用,而是让你在启动的 shell 中使用。

大概就这么多了,希望对题主有帮助。

这篇关于css - Flask script 内的Shell 类 使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆