繁体   English   中英

如何使用flask在回调函数中返回响应

[英]How to return a response in callback function with flask

这是一个dll,可以比较人脸距离,并且compareFace.dll,我需要使用回调函数来接收它的值

现在,我想用flask包装它,然后可以通过http和json访问

lib= c.CDLL('comparedFace.dll')
CALLBACKFUNC = c.CFUNCTYPE(None, c.c_int, c.c_char_p)
lib.startComparedFace.restype = c.c_int 
lib.startComparedFace.argtypes = (c.c_char_p, c.c_char_p, CALLBACKFUNC)


@app.route('/compare', methods=['GET', 'POST'])
def test():
    if request.method == 'POST':

        request_json = request.get_json()
        print(request_json)
        number       = request_json.get('number')
        image01      = request_json.get('image01')
        image02      = request_json.get('image02')
        print(image01)
        print(image02)


        @c.CFUNCTYPE(None, c.c_int, c.c_char_p)
        @copy_current_request_context
        def callback(status, result_string):

            result_json = json.loads(result_string)
            distance = result_json['compareResult']

            resp_data = {
                "number": number, 
                "distance": distance,
            }
            print(resp_data)
            response = Response(
                response=json.dumps(resp_data),
                status=200,
                mimetype='application/json'
            )
            return response


    lib.startComparedFace(b'd:/1.jpg', b'd:/2.jpg', callback)

运行代码,并且收到错误ValueError: View function did not return a response

我知道,我应该写一个“ xxx”作为回应

但是,我想等待回调函数,并在回调函数中返回响应,所以我应该如何修改我的代码,谢谢。

让我们看一个简单的场景:

  1. 用户提供他/她的用户名。
  2. 我们的函数根据用户名计算一个值。 使用time.sleep函数将此虚拟呼叫作为耗时的呼叫进行。
  3. 操作完成后,用户会收到该值。

这可以通过使用以下代码来实现。

app.py

import time
from flask import Flask, request, render_template

app = Flask(__name__)

@app.route('/', methods=["GET", "POST"])
def index():
    username = None
    value = 0
    if request.method == 'POST':
        username = request.form.get("username", None)

    def calculate_value_based_on_username(user_given_name):
        time.sleep(10)
        return len(user_given_name)

    if username:
        value = calculate_value_based_on_username(username)
        return render_template('app.html', username=username, value=value)
    return render_template('app.html')

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

app.html

<html>
  <head></head>
  <body>
    {% if username %}
      Hello {{ username }}! Length of your username: {{ value }}
    {% else %}
      Hello guest! 
    {% endif %}
    <form action="/" method="post">
      Username: <input type="text" name="username">
      <input type="submit" name="submit" value="Submit">
    </form>
  </body>
</html>

输出:

输出

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM