app.py的代码示例:
# imports here
app = Flask(__name__)
app.config.from_pyfile('app.cfg')
db.init_app(app)
with app.app_context():
if os.path.exists('database/example.db'):
print 'already exists'
else:
print 'database created'
db.create_all()
#routes here
if __name__ == '__main__':
app.run()
在初始加载时,它将打印“数据库已创建”,然后“已存在”。如果我在创建数据库时再次加载它,“已存在”打印两次。
already exists
* Running on http://127.0.0.1:5000/
* Restarting with reloader
already exists
两部分问题:
1)为什么app.app_context()块会执行两次?
2)编写此代码的更好方法是什么?
答案 0 :(得分:2)
要了解会发生什么,请回到python基础知识。键入python your_module.py
时,python解释器将逐行读取(解释)您的代码。在这种情况下,它将在到达那里时执行您的with app.app_context
代码,您将在下次看到输出数据库创建或已存在。接下来发生什么?解释器只会继续使用if __name__ == '__main__':
行,然后直接运行它会调用app.run
方法,默认情况下debug
参数为True
,它将开始开发服务器处于调试模式,自动重新加载器将重新启动代码(如@burnpanck所述)。