无法将测试用户推送到 SQLite DB

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

我正在尝试将测试用户添加到我的 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)
python database sqlite flask
2个回答
0
投票

该错误可能是通过 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"

0
投票

问题是

    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'
© www.soinside.com 2019 - 2024. All rights reserved.