如何在Python中使用Flask应用程序调用某些函数?

时间:2014-04-01 10:14:24

标签: python flask

我的myapp.py是这样的:

from flask import Flask
from flask import request
from flask import render_template
app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
         # do something
         # for example:
         message = 'I am from the POST method'
         f = open('somefile.out', 'w')
         print(message, f)

    return render_template('test.html', out='Hello World!')

if __name__ == '__main__':
    app.run()

我有一个简单的问题。 如何调用index()函数并仅在Python中的if语句(8到13行)中执行代码?

我试过这样的方式:

>>> import myapp
>>> myapp.index()

但是我收到了消息:

RuntimeError: working outside of request context

2 个答案:

答案 0 :(得分:7)

请参阅Request Context文档;你需要明确地创建一个上下文:

>>> ctx = myapp.app.test_request_context('/', method='POST')
>>> ctx.push()
>>> myapp.index()

您还可以将上下文用作上下文管理器(请参阅Other Testing Tricks):

>>> with myapp.app.test_request_context('/', method='POST'):
...     myapp.index()
...

答案 1 :(得分:1)

错误是由访问request.method函数中的index()属性引起的。除非您尝试访问其中的index()属性,否则可以毫无问题地致电request

request代理仅适用于request context

你可以在这里阅读更多内容: http://flask.pocoo.org/docs/reqcontext/

>>> request.method
(...)
>>> RuntimeError: working outside of request context

您可以创建如下的请求上下文:

>>> with app.test_request_context('/'):
...     request.method
... 
'GET'