flask子功能没有产生结果

时间:2014-08-17 00:37:49

标签: python flask

我有一堆代码(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'。

1 个答案:

答案 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)