我的目标是在Flask应用程序启动后运行任意代码.这是我得到的:
def run():
from webapp import app
app.run(debug=True, use_reloader=False)
Run Code Online (Sandbox Code Playgroud)
理想情况下,我可以这样做:
def run():
from webapp import app
app.run(debug=True, use_reloader=False)
some_code()
Run Code Online (Sandbox Code Playgroud)
但代码不会继续app.run(),所以some_code()永远不会运行.
我目前正在处理的解决方案是在app.run()的一个单独的线程中运行some_code(),创建一个先设置它的第一个请求函数:
app.is_running = True
Run Code Online (Sandbox Code Playgroud)
然后获取some_code()以向app发送基本请求,以便"在第一次请求之前"代码运行.这相当复杂,难以记录.我宁愿使用已经在Flask中提供的app.is_running参数,或者使用@app.after_server_start装饰器,但据我所知,这些都不存在.
帮我改进这段代码?
遗腹:每当我想到这个问题,它都会让我希望@app.after_server_start装饰品存在.
我通过搜索发现的所有内容在某种程度上都是错误的或不完整的。那么,我该如何:
我正在使用pytest来运行测试,并测试我的Web应用程序。我的测试文件看起来像
def test_logins():
# do stuff
def test_signups():
# do stuff
def testing_posting():
# do stuff
Run Code Online (Sandbox Code Playgroud)
它们大约有20个,其中许多具有恒定时间运行或依赖于外部HTTP请求的元素,因此,如果我可以让pytest启动20个不同的mutliprocessing,这似乎会导致测试速度大大提高。流程(每个测试一个)来运行每个测试功能。这可能/合理/建议吗?
我调查了xdist,但将测试进行了拆分,以便根据我的计算机上的内核数量运行这些测试不是我想要的。
同样在相关的情况下,大部分测试是使用python的请求库完成的(尽管最终它们将移至selenium)
如何在HTML路由上使用装饰器来转义其输出.也就是说,我如何在html_escape这里编写函数:
@app.route('/')
@html_escape
def index():
return '<html></html>'
Run Code Online (Sandbox Code Playgroud)
(我觉得应该有这个和其他简单的装饰者的扩展)
python ×4
flask ×2
alembic ×1
flask-script ×1
postgresql ×1
pytest ×1
python-3.x ×1
selenium ×1
sqlalchemy ×1