📜  使用 Flask 从数据中检索 HTML(1)

📅  最后修改于: 2023-12-03 15:22:11.331000             🧑  作者: Mango

使用 Flask 从数据中检索 HTML

在 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)