📅  最后修改于: 2023-12-03 15:22:11.331000             🧑  作者: Mango
在 Flask 应用程序中,我们可以使用模板来渲染 HTML。但在某些情况下,我们可能需要从数据库中检索 HTML 来绘制页面。
在这篇文章中,我将介绍如何在 Flask 应用程序中使用 Flask-SQLAlchemy 来检索 HTML。
首先,确保已安装 Flask 和 Flask-SQLAlchemy:
pip install Flask
pip install Flask-SQLAlchemy
其次,在 Flask 应用程序中创建一个数据模型。我们将使用一个简单的模型来表示页面:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Page(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100))
content = db.Column(db.Text)
接下来,我们需要从数据库中检索 HTML 并在模板中呈现它。我们可以使用 Flask 的 render_template_string
函数来呈现模板字符串。
我们将在模板中使用 Jinja2 语法来呈现检索到的 HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{{ page.title }}</title>
</head>
<body>
{{ page.content|safe }}
</body>
</html>
在上面的模板中,我们使用了 {{ page.title }}
和 {{ page.content|safe }}
语法。 {{ page.title }}
是从数据库中检索到的页面标题, {{ page.content|safe }}
则是检索到的 HTML 代码。
safefilter
会让 Jinja2 认为我们信任检索到的 HTML 代码,因此 Jinja2 不会将其转义。
接下来,我们需要一个视图函数来获取页面数据并使用该数据呈现模板。我们可以使用 Flask 的 route
装饰器来声明视图函数。
在简单的应用程序中,我们可以放置路由和视图函数在一个文件夹中,在我们的 case 中,与其破坏自然的语言表达,来找到一些自定义路径,不如我们在入口文件app.py中完成所有的路由和视图函数。
app.py 代码如下:
from flask import Flask, render_template_string
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)
class Page(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100))
content = db.Column(db.Text)
page = Page(title="My Page", content="<h1>Hello World!</h1>")
db.session.add(page)
db.session.commit()
@app.route('/')
def index():
page = Page.query.filter_by(title="My Page").first()
return render_template_string(page.content, page=page)
if __name__ == '__main__':
app.run(debug=True)
在上面的代码中,我们首先指定 SQLite 数据库的 URI,并创建一个 Page
对象。我们将其加入到数据库中,并使用 commit
方法提交更改。
然后,我们定义一个名为 index
的路由。在该路由上,我们使用 Page.query.filter_by
方法来检索包含我们页面的 Page
对象。最后,我们使用 render_template_string
函数来呈现我们检索到的 HTML。
在运行应用程序之前,确保您的数据库已经创建。您可以使用以下命令来创建它:
python
from app import db
db.create_all()
exit()
在本文中,我们介绍了如何使用 Flask-SQLAlchemy 在 Flask 应用程序中检索 HTML。使用上述方法,您可以将动态内容动态插入到 HTML 中,并呈现该页面。
最后,我们将这些步骤翻译成了代码并在服务器上运行它。现在,如果您在您的浏览器中打开 http://127.0.0.1:5000/ ,您将看到你的页面!
@app.route('/')
def index():
page = Page.query.filter_by(title="My Page").first()
return render_template_string(page.content, page=page)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{{ page.title }}</title>
</head>
<body>
{{ page.content|safe }}
</body>
</html>
from flask import Flask, render_template_string
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)
class Page(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100))
content = db.Column(db.Text)
page = Page(title="My Page", content="<h1>Hello World!</h1>")
db.session.add(page)
db.session.commit()
if __name__ == '__main__':
app.run(debug=True)