我的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
答案 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'