我正在尝试将测试用户添加到我的 sqlite 数据库中的用户表中,该数据库是网站的一部分。当尝试添加测试用户时,我收到一个 TypeError,如下所示:
TypeError: The view function did not return a valid response. The return type must be a string, dict, list, tuple with headers or status, Response instance, or WSGI callable, but it was a TypeError.
完整代码如下所示:
from flask import Flask
from flask import render_template
from flask import redirect
from flask import url_for
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users_db.db'
app.secret_key = "secret"
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=False, nullable=False)
email = db.Column(db.String(), unique=True, nullable=False)
password = db.Column(db.String(), unique=False, nullable=False)
def __repr__(self):
return f"User('{self.username}', '{self.email}', '{self.id}')"
@app.route('/')
def home():
return render_template('home.html')
@app.route('/test_db')
def test_db():
try:
test_user = User(username='TestUser', email='[email protected]', password='testpassword')
db.session.add(User(test_user))
db.session.commit()
return "Test Passed"
except Exception as e:
return e
if __name__ == "__main__":
with app.app_context():
db.create_all()
app.run(debug=False)
该错误可能是通过 Flask 调用
test_db
引起的。它可以返回一个异常(TypeError 是一个异常)。实现 Flask 路由的方法必须返回响应,异常不是响应。
最好让异常发生并使用其信息进行调试。
@app.route('/test_db')
def test_db():
test_user = User(username='TestUser', email='[email protected]', password='testpassword')
db.session.add(User(test_user))
db.session.commit()
return "Test Passed"
问题是
except Exception as e:
return e
这将返回异常对象,但这不是路由函数返回的有效类型。
简单的解决方法是将异常转换为字符串:
except Exception as e:
return str(e)
但是,在生产应用程序中,您通常不应向用户公开内部错误消息。最好使用
logging
模块来记录消息,并返回通用错误消息字符串
except Exception as e:
logging.error(str(e))
return 'An internal error occurred'