在IPython笔记本单元运行之前运行代码
我正在写一大堆关于如何使用Flask的例子,目前我希望能够直接编写在IPython笔记本单元运行之前运行代码,ipython,ipython-notebook,Ipython,Ipython Notebook,我正在写一大堆关于如何使用Flask的例子,目前我希望能够直接编写 @app.route("/") def redirectora(): redirect("redirected") @app.route("/targeta", methods=["GET", "POST"]) def redirecteda(): return "Redirected!" app.run(host="0.0.0.0", port=5000) 在我的牢房里,但我必须包括 app = Flas
@app.route("/")
def redirectora():
redirect("redirected")
@app.route("/targeta", methods=["GET", "POST"])
def redirecteda():
return "Redirected!"
app.run(host="0.0.0.0", port=5000)
在我的牢房里,但我必须包括
app = Flask("the_flask_module")
在每个单元格中(否则,如果我两次运行该单元格,我会得到一个关于两次尝试添加路由的断言错误)
我真的希望能够在运行计算单元之前运行代码(因此我不必写app=
60次),但我找不到笔记本电脑的任何信号或挂钩
有人知道在运行任何单元格之前如何运行代码吗?每次调用app=Flask(“Flask\u模块”)时,您都在创建一个新的Flask应用程序实例。如果在每个单元格的顶部都有这个,那么每次执行一个单元格时,都会清除前面的Flask应用程序实例。例如,如果您这样做:
app = Flask('my_app')
@app.route('/targeta')
def targeta():
return 'targeta'
app = Flask('my_app')
@app.route('/targetb')
def targeta():
return 'targetb'
app.run(host="0.0.0.0", port=5000)
/塔吉塔将返回404
如果这是您想要的行为,即每个单元格都应该是独立的烧瓶端点,那么您可以通过创建自己的装饰器来实现这一点,该装饰器为您装饰的任何功能创建一个新的应用程序对象,如下所示:
class route(object):
def __init__(self, path, **kwargs):
self.path = path
self.kwargs = kwargs
def __call__(self, func):
app = Flask('my_flask_app')
app.add_url_rule(self.path, func.func_name, func, **self.kwargs)
app.run(host="0.0.0.0", port=5000)
@route('/targeta')
def targeta():
return 'targeta'
如果允许您查找的行为多次使用@app.route而不接收断言错误,您可以创建自己的装饰程序,调用add_url_规则并接受异常:
class route(object):
def __init__(self, path, **kwargs):
self.path = path
self.kwargs = kwargs
def __call__(self, func):
try:
app.add_url_rule(self.path, func.func_name, func, **self.kwargs)
except AssertionError, e:
pass
在这两种情况下,您将按照以下方式装饰您的功能:
class route(object):
def __init__(self, path, **kwargs):
self.path = path
self.kwargs = kwargs
def __call__(self, func):
app = Flask('my_flask_app')
app.add_url_rule(self.path, func.func_name, func, **self.kwargs)
app.run(host="0.0.0.0", port=5000)
@route('/targeta')
def targeta():
return 'targeta'
假设您这样做是出于教程或演示的目的,那么您需要将装饰代码放在笔记本的设置部分,这样就可以清楚地了解您为什么这样做。请澄清,您的每个单元格是否也执行app.run(…)?或者你有很多单元格,每个单元格都包含@app.route(…),最后一个单元格包含app.run(…)?目前每个单元格都包含app.run,这样我就可以独立运行它们了。一个更好的办法是在底部有一个单元格,可以运行所有内容,但我不想跳转。。