使用UrlRequest连接Flask后端与Kivy应用时遇到问题

0 投票
1 回答
20 浏览
提问于 2025-04-14 16:18

我现在在做一个项目,里面有一个Flask后端和一个Kivy应用。我想让这两个部分能互相通信,打算用Kivy的UrlRequest来实现。但是,看起来我的Flask应用没有按预期接收到来自UrlRequest的数据。

这里有几个关键点:

  • 我已经设置好了Flask后端来处理请求。
  • Kivy应用向Flask的某个接口发起了UrlRequest。
  • 尽管URL配置是正确的,但Flask应用似乎拒绝了通过UrlRequest发送的数据。

如果有人能提供一些建议或者解决这个问题的思路,我将非常感激!

This is my back end endpoint:
@recipes_blueprint.route('/ask_mobile', methods=['POST'])
def ask_recipe_mobile():
    content = request.json['content']
    print(content)
    recipe = recipe_request_mobile(content)
    return jsonify({
        'data': recipe,
        'status': 200,
        'message': 'Recipe created successfully'
    }), 200

我的Kivy应用是:

    def load_content(self, query):
        params = urlencode({'content': query})
        headers = {
            'Content-Type': 'application/json'
        }
        req = UrlRequest('http://127.0.0.1:5000/recipes/ask_mobile',
                         req_body=params, req_headers=headers, on_error=handle_error)
        print(req.req_body)

我在后端遇到了400错误

1 个回答

0

你发送的数据是经过编码的,但在服务器那边却希望接收到的是json格式的数据。因此,服务器在尝试解析这些数据时就会出错。

下面的例子展示了如何以json格式发送数据。

import json

# ...

    def load_content(self, query):
        req_headers = {
            'Content-Type': 'application/json'
        }
        req_body=json.dumps({'content': query})
        req = UrlRequest('http://127.0.0.1:5000/reciepes/ask_mobile', 
            req_headers=req_headers, 
            req_body=req_body, 
            on_success=self.handle_success)

    def handle_success(self, request, result):
        print(result)

撰写回答