flask结合jinja2使用详解

Flask和Jinja2是一对经典的组合,Jinja2是Python中一种基于模板的语言,而Flask则是一个轻量级的web框架。

安装

首先,我们需要安装两个模块,Flask和Jinja2。可以通过pip来进行安装:

pip install Flask
pip install Jinja2

创建Flask应用

首先,在项目根目录下创建一个app.py文件,用于创建Flask应用:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run()

创建html模板

创建一个名为templates的文件夹,用于存放HTML模板。在templates文件夹下,创建一个名为index.html的文件,用于显示刚才Flask应用返回的Hello, World!。在index.html文件中,可以使用Jinja2模板语言:

<!DOCTYPE html>
<html>
    <head>
        <title>Flask + Jinja2 Example</title>
    </head>
    <body>
        <h1>{{ greeting }}</h1>
    </body>
</html>

安装jinja2

在app.py文件中加入以下代码,告诉Flask去哪里查找HTML模板:

import os
from flask import Flask, render_template

app = Flask(__name__)
app.template_folder = os.path.abspath('templates')

@app.route('/')
def index():
    return render_template('index.html', greeting='Hello, World!')

if __name__ == '__main__':
    app.run()

render_template()函数将HTML模板中使用的变量和实际的值进行关联,这样{{ greeting }}就会被替换为Hello, World!

同时,为了保证代码的可读性和可维护性,可以使用Jinja2中的模板继承。在templates文件夹下,创建一个名为base.html的文件,用于提供页面的公共部分:

<!DOCTYPE html>
<html>
    <head>
        <title>{% block title %}Flask + Jinja2 Example{% endblock %}</title>
    </head>
    <body>
        {% block content %}{% endblock %}
    </body>
</html>

在index.html中,通过Jinja2的模板继承,让base.html提供公共结构,而index.html只需关注自己的内容:

{% extends "base.html" %}

{% block title %}Flask + Jinja2 Example{% endblock %}

{% block content %}
    <h1>{{ greeting }}</h1>
{% endblock %}

这样,我们就可以使用Flask和Jinja2结合进行web开发了。

示例一:表单处理

在上面的例子中,我们仅展示了如何将变量传递给HTML模板。接下来,我们将展示如何通过HTML表单和Flask进行交互。

在templates文件夹下,创建一个名为form.html的HTML文件,用于展示表单。HTML代码如下:

{% extends "base.html" %}

{% block title %}Flask + Jinja2 Example{% endblock %}

{% block content %}
    <h1>Flask Form Example</h1>
    <form method="POST" action="{{ url_for('form_submit') }}">
        <label for="name">Name:</label>
        <input type="text" name="name" id="name">

        <label for="email">Email:</label>
        <input type="email" name="email" id="email">

        <input type="submit" value="Submit">
    </form>
{% endblock %}

其中{{ url_for('form_submit') }}将表单的action指向了一个名为form_submit的路由函数。

在app.py中,加入路由函数form_submit:

from flask import Flask, render_template, request

app = Flask(__name__)
app.template_folder = os.path.abspath('templates')

@app.route('/form', methods=['GET'])
def form():
    return render_template('form.html')

@app.route('/form', methods=['POST'])
def form_submit():
    name = request.form.get('name')
    email = request.form.get('email')
    return f'Hello, {name} ({email})!'

if __name__ == '__main__':
    app.run()

在form_submit中,通过request.form获取表单中用户输入的内容,并将最终结果返回给用户。

示例二:数据库操作

在Flask中,ORM工具Flask-SQLAlchemy是应用最广泛的数据库操作扩展。下面展示如何使用Flask和Jinja2结合进行数据库操作。

首先,需要使用pip安装Flask-SQLAlchemy:

pip install Flask-SQLAlchemy

然后,修改app.py,添加数据库配置:

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.template_folder = os.path.abspath('templates')
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'

db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    email = db.Column(db.String(100))

db.create_all()

@app.route('/users', methods=['GET'])
def users():
    users = User.query.all()
    return render_template('users.html', users=users)

if __name__ == '__main__':
    app.run()

在这个例子中,我们首先定义一个User模型类,其中包含三个属性id、name和email。然后,通过db.create_all()函数来创建相应的数据表。

最后,在路由函数users中,使用User.query.all()获取所有的用户,并将结果传递给HTML模板。

在templates文件夹下,创建一个名为users.html的HTML文件,展示数据库中的用户信息:

{% extends "base.html" %}

{% block title %}Flask + Jinja2 Example{% endblock %}

{% block content %}
    <h1>Flask Database Example</h1>
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>Email</th>
            </tr>
        </thead>
        <tbody>
            {% for user in users %}
            <tr>
                <td>{{ user.id }}</td>
                <td>{{ user.name }}</td>
                <td>{{ user.email }}</td>
            </tr>
            {% endfor %}
        </tbody>
    </table>
{% endblock %}

其中,{% for user in users %}遍历了所有的用户,将结果渲染到HTML表格中。

这就是使用Flask和Jinja2进行web开发的基本流程。通过Flask和Jinja2的结合,可以让web开发变得更加简单、高效、易维护。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:flask结合jinja2使用详解 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • Python动态配置管理Dynaconf的实现示例详解

    针对“Python动态配置管理Dynaconf的实现示例详解”这个话题,我们可以分成以下几个部分进行讲解: 什么是Dynaconf Dynaconf的使用方法 示例一:使用Dynaconf管理Flask应用的配置 示例二:使用Dynaconf和Docker容器管理Django应用的配置 1. 什么是Dynaconf Dynaconf是一个Python库,旨在…

    Flask 2023年5月16日
    00
  • 90行Python代码开发个人云盘应用

    下面是详细讲解“90行Python代码开发个人云盘应用”的完整攻略。 简介 本攻略旨在教你如何使用Python开发个人云盘应用。该云盘应用支持上传、下载、删除和列出文件等基本操作。我们将使用 Flask 框架和 Python 的 os、shutil、argparse 模块来实现云盘应用。 开发环境 在开始之前,确保你的计算机安装了 Python 3 版本以及…

    Flask 2023年5月16日
    00
  • Flask-Vue前后端分离的全过程讲解

    让我来详细讲解一下Flask-Vue前后端分离的全过程及两个示例。 1. 背景介绍 在现代Web应用中,前后端分离是一种流行的应用架构方式。采用前后端分离的架构,可以充分发挥前端和后端的优势,提高应用的性能和稳定性。在前后端分离架构中,前端和后端通常采用不同的技术栈来实现,例如前端使用Vue.js框架,后端使用Flask框架。 2. 环境配置 在使用Flas…

    Flask 2023年5月15日
    00
  • 详解Python Flask框架的安装及应用

    下面是详解Python Flask框架的安装及应用攻略。 安装Flask框架 首先,我们需要安装Flask框架。你可以使用pip命令进行安装。在你的命令行终端中输入以下命令: pip install flask 这个命令会自动下载并安装Flask框架。如果出现类似”Successfully installed Flask-1.1.1 Jinja2-2.10.…

    Flask 2023年5月15日
    00
  • python使用Flask操作mysql实现登录功能

    下面是使用Flask操作mysql实现登录功能的完整攻略。 1. 安装依赖 首先需要安装Flask和MySQL驱动。可以使用以下命令安装: pip install flask pymysql 2. 创建数据库 在MySQL中创建一个名为user的数据库,然后在该数据库中创建一个名为user_info的表。 CREATE DATABASE user; USE …

    Flask 2023年5月15日
    00
  • python框架flask表单实现详解

    下面我就为您详细讲解“Python框架Flask表单实现详解”的完整攻略,包含两条示例说明。 1. 安装Flask框架 在开始使用Flask框架之前,需要先安装Flask框架。使用以下命令可以完成安装: pip install flask 2. 创建Flask应用并定义表单 在导入Flask框架后,我们需要创建一个Flask应用,并定义表单。首先要导入需要用…

    Flask 2023年5月15日
    00
  • JS实现留言板功能

    JS实现留言板功能需要分为前端和后端两部分来完成。前端主要负责用户交互的展示和处理,后端主要负责数据的存储和传递。 前端实现 1. HTML和CSS 首先需要创建一个包含留言板所需元素的HTML文件,并使用CSS样式美化页面。留言板所需的元素可能包括标题、留言内容输入框、留言列表等等。需要注意的是,留言列表实际上是一个包含多个留言的容器,而每个留言又由多个元…

    Flask 2023年5月16日
    00
  • 利用 Flask 动态展示 Pyecharts 图表数据方法小结

    以下是详细的攻略: 利用 Flask 动态展示 Pyecharts 图表数据方法小结 一、背景 在 Web 应用开发过程中,展示数据是一个非常重要的需求。而 Pyecharts 是一个非常强大且易于使用的数据可视化库,尤其是在 Python 中使用时更是如此。而 Flask 则是一款非常流行的 Python Web 框架,使用 Flask 动态展示 Pyec…

    Flask 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部