WebApp只需首次执行某些操作,逻辑应放在哪里?Flask或Django
我正在开发的网页应用需要进行一次性的设置或初始化,
那么,放置这些逻辑的好地方在哪里呢?我不想在每次请求根目录(/)时都检查是否存在配置或设置,因为这样效率不高。
我在想,能否在应用启动时检查一下是否有合理的配置,然后把根目录(/)的默认路由改成设置页面,等设置完成后再改回来。不过,这样有点像自我修改代码。
这是必须的,因为这个网页应用需要设置,然后根据这些设置来索引一些内容,这个过程需要一点时间。所以在设置完成后,我还得等一段时间,直到索引完成。因此,即使设置已经做好,后续的请求也需要看到一个“正在索引,请稍等”的提示。
我在使用Flask,不过我觉得这对Django也适用。
编辑:我现在是这样想的;
在启动时,检查appconfig.py中的MY_SETTINGS,如果没有,就从config.py添加一个默认值,并在app.config上放一个状态为firstrun的对象,同时把根目录(/)的路由改成设置视图函数。
设置视图函数会检查app.config.status对象,并在用户输入后根据需要进行设置。当设置完成后,
就删除app.config.status或把它改成“正在索引”,然后我可以用一个before_request函数来检查app.config.status,只是为了显示一个提示信息。
或者我可以用flask.g来代替app.config来存储状态?
1 个回答
正确的方法是创建一个命令行脚本,如果你在用Flask的话,最好通过Flask-Script
来实现(如果你用的是Django,那就可以用默认的manage.py
,在这里你也可以轻松添加自定义命令)。你可以定义一个像init
或者install
这样的函数:
from flaskext.script import Manager
from ... import app
manager = Manager(app)
@manager.command
def init():
"""Initialize the application"""
# your code here
然后你可以在文档中提到这个函数,并且可以假设在访问网页应用时,这个函数已经被执行过了。