【问题标题】:How to access app library via iPython for a Flask application?如何通过 iPython 访问 Flask 应用程序的应用程序库?
【发布时间】:2020-06-25 08:32:02
【问题描述】:

我有一个 Flask 项目,其中入口点是 application.py,然后我有几个其他模块,例如, variant.py

项目结构为:

>my_app_dir/
   application.py
   views/
       __init__.py
       users.py
       variant.py
       ...

对于variant.py,它是一个类似的函数:

import ...
from views import *

def variant(variant_id, subset='all', language='en'):
    ...
    if subset == 'all':
        return json.dumps(x)
    return json.dumps([{subset: y[subset]} for y in x])

关键是我想像 API 一样使用variant.py,所以我正在通过iPython 进行测试,但它返回错误:

from views import variant as v
aa = v.variant('22-38212762-A-G')
...
RuntimeError: Working outside of request context.

This typically means that you attempted to use functionality that needed
an active HTTP request.  Consult the documentation on testing for
information about how to avoid this problem.

我试过谷歌搜索,但找不到任何类似的案例,但我尝试了几件事无济于事。

【问题讨论】:

  • 您想像 API 一样使用variant.py 吗?我期待您向端点发出 http 请求。还不是很清楚。这个线程可能有用stackoverflow.com/questions/9931738/…
  • 该代码适用于 Web 应用程序。由于variant.py 正在访问我们的 postgres 数据库,我可能希望在本地测试或快速调试以及在 iPython 中重用这个函数,我觉得很舒服。

标签: python flask ipython


【解决方案1】:

最后,我找到了获得我想要的东西的方法:

from views import application, autocomplete
from views.variant import variant

ctx = application.test_request_context(path='/login',method='POST', data={'user':'demo','password':'demo123'})
ctx.push()

variant('22-38212762-A-G')[:50]

autocomplete.autocomplete('ttll','gene').json

所以,本质上,诀窍是:

ctx = application.test_request_context(path='/login',method='POST', data={'user':'demo','password':'demo123'})
ctx.push()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多