我有一堆代码(1300行)正常工作,我正在尝试将烧瓶纳入图片中。为了做到这一点,我试图使用flask.Response来调用我的方法中的一个函数,该函数调用我的类中的另一个方法。
以下是重新创建问题的测试代码。
#!/usr/bin/env python
import flask
class TestClass(object):
app = flask.Flask(__name__)
def __init__(self):
pass
def worker(self):
yield 'print test\n'
@app.route('/')
def test_method_get_stuff():
return flask.render_template('index.html')
@app.route('/', methods=['POST'])
def test_method_post_stuff():
def test_method_sub_function():
tc.worker()
return flask.Response(test_method_sub_function(),mimetype= 'text/plain')
tc = TestClass()
tc.app.run(debug=True)
index.html
只有一个带有提交按钮的文本框。
我遇到的问题是,一旦你点击提交按钮,请求成功完成,但页面是空白的,在python命令行或浏览器中没有错误,我期望发生的是以纯文本显示“打印测试”带换行符。'
任何帮助将不胜感激。我试图避免完全重写我的所有代码。理解为我必须在代码中用'yield'命令替换'print'。
答案 0 :(得分:0)
您的嵌套test_method_sub_function()
函数不会返回任何内容;它只是创建生成器(通过调用生成器函数),然后退出。
至少返回 tc.worker()
来电:
def test_method_sub_function():
return tc.worker()
此时路线有效。您也可以跳过此嵌套函数,然后直接使用tc.worker()
:
@app.route('/', methods=['POST'])
def test_method_post_stuff():
return flask.Response(tc.worker(), mimetype='text/plain')
一个注意事项:虽然您使用Flask
对象作为类属性恰好可以使用,但您应该将它放在一个类中。将app
对象和路由保留在类之外:
import flask
class TestClass(object):
def worker(self):
yield 'print test\n'
tc = TestClass()
app = flask.Flask(__name__)
@app.route('/')
def test_method_get_stuff():
return flask.render_template('index.html')
@app.route('/', methods=['POST'])
def test_method_post_stuff():
return flask.Response(tc.worker(), mimetype='text/plain')
app.run(debug=True)