我一直陷入 Flask 错误。 TypeError:视图函数没有返回有效响应[重复]

Posted

技术标签:

【中文标题】我一直陷入 Flask 错误。 TypeError:视图函数没有返回有效响应[重复]【英文标题】:I've been stuck in Flask error . TypeError: The view function did not return a valid response [duplicate] 【发布时间】:2021-01-17 06:23:06 【问题描述】:

我一直在制作 Flask api,它获取表的名称参数并使用此参数将 SQL 传递给 BigQuery,并返回包含客户端发送的表名称的所有列名的列表。我确认此函数在 Python 中确实是我的理想,但如果我尝试将此函数转换为 Flask ,它不能很好地处理诸如“TypeError:视图函数没有返回有效响应。函数返回 None 或在没有返回声明的情况下结束”。实际上,我已经用 Flask 制作了一些 api,但这次我完全不知道该怎么做。有语法错误吗??能给我一些建议吗??

Flask

import urllib.request
import urllib.parse
import json
from google.cloud import storage
from google.cloud import bigquery
from flask import Flask, request, jsonify, Response

app = Flask(__name__)

@app.route('/')
def get_tags():
    tableName = request.args.get('tableName') or ''
    client = bigquery.Client()
    query = """SELECT column_name 
                    FROM `testProject.testTable.INFORMATION_SCHEMA.COLUMNS` 
                    where table_name = '' """.format(tableName)


    job_config = bigquery.QueryJobConfig(
        query_parameters=[
            bigquery.ScalarQueryParameter("tableName", "STRING", tableName)
        ]
    )

    query_job = client.query(query)
    query_res = query_job.result()

    tag_list = []
    for row in query_res:
        tag_list.append(row[0])
    
    response = Response(json.dumps(tag_list))
    response.headers['Access-Control-Allow-Origin'] = '*'
    return print(response)

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

import json
from google.cloud import bigquery
import requests

def get_tags(self):
    client = bigquery.Client()
    query = """SELECT column_name 
                    FROM `testProject.testTable.INFORMATION_SCHEMA.COLUMNS` 
                    where table_name = '' """.format(tableName)


    job_config = bigquery.QueryJobConfig(
        query_parameters=[
            bigquery.ScalarQueryParameter("tableName", "STRING", tableName)
        ]
    )

    query_job = client.query(query)
    query_res = query_job.result()

    tag_list = []
    for row in query_res:
        tag_list.append(row[0])

    return print(tag_list)

tableName = "test"
get_tags(tableName)


The result 
['pgid', 'last_login_date', 'start_chat_numbers', 'username', 'luid', 'Q1_start', 'Q1_start_date', 'Q2_start', 'Q2_start_date', 'Q3_start', 'Q3_start_date', 'Q4_start', 'Q4_start_date', 'Q5_start', 'Q5_start_date', 'first_purchased', 'first_purchased_end', 'first_purchased_date', 'first_purchased_end_date', 'first_purchased_start', 'first_purchased_start_date', 'guidance1', 'guidance1_date', 'guidance2', 'guidance2_date', 'main_end', 'main_end_date', 'main_start', 'main_start_date', 'push1', 'push1_date', 'push1_end', 'push1_end_date', 'push1_start', 'push1_start_date', 'last_unfollow_date', 'last_follow_date', 'cv', 'orderid']

【问题讨论】:

打印函数返回None,所以你从get_tags函数返回None,这是一个无效的响应。请改用return response。这行得通吗? 【参考方案1】:

我检查了 GAE 日志,发现“从 google.cloud 导入存储”导致错误,我删除了它,它工作正常。非常感谢!

【讨论】:

以上是关于我一直陷入 Flask 错误。 TypeError:视图函数没有返回有效响应[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Flask 视图引发 TypeError:'bool' 对象不可调用

TypeError:使用 Flask-JWT 时需要字符串或字节格式的密钥

Flask-登录 | TypeError:需要支持缓冲区 API 的对象

flask TypeError:“ImmutableMultiDict”对象不可调用

TypeError Ajax Post - Flask Python [重复]

烧瓶登录:TypeError:不支持解码Unicode