从 javascript 文件调用 Python Api 不起作用

问题描述 投票:0回答:1

尝试从下面创建的 python api 检索数据时,我收到 js 文件的“无法加载资源:服务器响应状态为 500(内部服务器错误)”错误第 3 行。我尝试重新启动并再次执行该过程,但结果是相同的。

app.js

/*async function fetchdata(){*/
    try {
        const response = await fetch('http://127.0.0.1:5000/api/get_data');
        const data = await response.json();  // Convert response to JSON

        console.log('Data:', data);

        // return data; 
    } catch (error) {
        console.error('Error:', error);
    }
/*}
fetchdata();*/

应用程序.py

@app.route('/api/get_data', methods=['GET'])
def get_data():
    form = loginForm()
    print('hello')
    data = {
        "ownsPython": str(User.query.filter_by(username = form.username.data).first().javascriptOwner),
        "ownsJava" : str(User.query.filter_by(username = form.username.data).first().pythonOwner),
        "ownsPython" : str(User.query.filter_by(username = form.username.data).first().ownsJavascript)
    }
    return jsonify(data)
javascript python backend
1个回答
0
投票

最有用的信息将在 Flask 应用程序的日志中。当您发出请求时,请查找那里打印的任何错误或堆栈跟踪。这将帮助您查明问题。

潜在原因

  • loginForm 实例及其用法未显示在您的代码片段中。确保 loginForm 定义正确并且 form.username.data 有效。
  • form.username.data 未正确设置或 User.query.filter_by(username=form.username.data).first() 返回 None,当尝试访问 None 的属性时,您将收到 AttributeError 。
  • 数据字典中有两个同名“ownsPython”的键。您应该使用唯一的密钥。
@app.route('/api/get_data', methods=['GET'])
def get_data():
    try:
        form = loginForm()  
        username = form.username.data
        
        user = User.query.filter_by(username=username).first()
        if user is None:
            raise ValueError("User not found")
        
        data = {
            "ownsPython": str(user.pythonOwner),
            "ownsJava": str(user.javaOwner),  # Fixed key
            "ownsJavascript": str(user.ownsJavascript)
        }
        
        return jsonify(data)
    except Exception as e:
        print(f"Error occurred: {e}")
        return jsonify({"error": "Internal Server Error"}), 500
  • cors问题(通常)

您可能需要在 Flask 应用程序中配置 CORS(跨源资源共享)。

pip install flask-cors
from flask_cors import CORS
app = Flask(__name__)
CORS(app)

aa 和测试:)

Postman或wget或curl直接测试您的API端点(http://127.0.0.1:5000/api/get_data)并查看它是否返回预期结果或错误。

© www.soinside.com 2019 - 2024. All rights reserved.