我一直陷入 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”对象不可调用