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 搭建Web站点之Web服务器与Web框架

    Python是一种非常流行的编程语言,可以用来开发各种不同目的的应用程序。本文将介绍如何使用Python来搭建Web站点,具体包括Web服务器和Web框架的实现。 Web服务器 Web服务器是一种用于接收和响应HTTP请求的软件程序。Python提供了许多不同的Web服务器,包括内置的BaseHTTPServer、SimpleHTTPServer等。其中最流…

    Flask 2023年5月16日
    00
  • 基于React-Dropzone开发上传组件功能(实例演示)

    下面详细讲解一下“基于React-Dropzone开发上传组件功能(实例演示)”的完整攻略。 一、React-Dropzone 简单介绍 React-Dropzone 是一个开源的 React 组件,可以帮助我们在 React 项目中快速构建一个上传文件的功能。它支持拖拽上传,以及点击上传,同时还支持多种类型的文件上传,包括图片、文档、音频、视频等。 二、安…

    Flask 2023年5月16日
    00
  • Flask 变量规则详解

    Flask 是一个轻量级的 Web 框架,其变量规则功能允许开发者创建动态 URL。这篇文章将介绍 Flask 变量规则的详细信息,帮助开发者理解如何使用 Flask 创建动态 URL。本文将涉及以下主题: 什么是变量规则? 如何使用变量规则创建动态 URL? 给变量规则添加限制条件 什么是变量规则? 在 Flask 中,变量规则指的是将 URL 中的部分作…

    Flask 2023年3月13日
    00
  • flask+layui+echarts实现前端动态图展示数据效果

    下面是使用Flask、LayUI和ECharts实现前端动态数据展示效果的完整攻略,包含两个示例。 步骤一:安装并配置Flask 安装Flask:在命令行窗口中输入pip install Flask即可安装。 创建Flask应用:在项目文件夹中创建一个名为app.py的Python文件,并编写代码: “`python from flask import F…

    Flask 2023年5月16日
    00
  • 浅谈flask截获所有访问及before/after_request修饰器

    下面是“浅谈flask截获所有访问及before/after_request修饰器”的完整攻略和示例说明。 这篇文章的目的 本文旨在介绍如何使用Flask中的before_request和after_request修饰器方法,截获所有对网站的访问请求,并在请求处理前或请求处理后做出一些操作。 Flask中的before_request和after_reque…

    Flask 2023年5月16日
    00
  • python 详解如何写flask文件下载接口

    下面就是关于如何写Flask文件下载接口的完整攻略。 1. 环境准备 在开始编写Flask的文件下载接口前,我们要先准备好相应的开发环境,包括以下几个部分: Python3环境 Flask框架 werkzeug库 当然,Python3环境及以上的版本已经自带了pip包管理器,可以通过它来安装Flask和werkzeug库。在安装完以上三个环境的前提下,我们可…

    Flask 2023年5月16日
    00
  • python爬取NUS-WIDE数据库图片

    下面为您介绍“python爬取NUS-WIDE数据库图片”的完整攻略,包含两条示例说明。 简介 NUS-WIDE是一个包含269,648张图片的数据库,图片来源于Flickr社交网站。这些图片被手工标注为38个不同的标签。这个数据库可以用于图像检索、多标签分类、语义注释等领域的研究。 在使用NUS-WIDE数据库进行研究时,我们通常需要把图片下载到本地。本文…

    Flask 2023年5月15日
    00
  • Python-Flask:动态创建表的示例详解

    下面是详细的攻略: 标题:Python-Flask:动态创建表的示例详解 1. 示例一: 在Flask Web框架中,可以通过SQLAlchemy库来实现动态创建数据库表的功能。首先需要导入SQLAlchemy库,并配置数据库连接参数,例如: from flask_sqlalchemy import SQLAlchemy app = Flask(__name…

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