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使用Flask框架获取当前查询参数的方法

    下面是关于“Python使用Flask框架获取当前查询参数的方法”的完整攻略: 什么是查询参数? 在网页中,我们经常需要向后端服务器发送一些请求,例如搜索、排序等请求。我们可以通过在请求的URL中添加查询参数来携带请求的信息。例如,搜索某个商品,我们可以使用如下的URL: https://example.com/search?q=iphone 在这个URL中…

    Flask 2023年5月16日
    00
  • Flask框架路由和视图用法实例分析

    Flask框架路由和视图用法实例分析 Flask是一种使用Python编写的Web开发框架。Flask框架能够帮助我们快速构建Web应用程序。在Flask框架中,我们需要关注的一些关键概念包括路由(routing)、视图(views)、模板(templates)和表单(forms)。在本文中,我将详细介绍Flask框架中的路由和视图的用法,并提供两个完整的代…

    Flask 2023年5月16日
    00
  • Elasticsearches之python使用及Django与Flask集成示例

    下面我将为您详细讲解“Elasticsearches之python使用及Django与Flask集成示例”的完整攻略,这个攻略主要包含两个示例说明:使用python操作Elasticsearch以及如何将Elasticsearch集成到Django和Flask中。 Elasticsearches之Python使用 安装elasticsearch-py 首先,…

    Flask 2023年5月16日
    00
  • Django使用HttpResponse返回图片并显示的方法

    当我们需要在Django框架中展示一张图片或者返回一张图片时,可以使用HttpResponse将图片内容以二进制格式返回给浏览器。下面是展示如何使用HttpResponse返回图片并显示的方法的完整攻略: 方法1:读取图片文件并返回 首先在Django的视图函数中,导入以下模块: python from django.http import HttpResp…

    Flask 2023年5月16日
    00
  • Flask 表单处理方法(含源码)

    Flask中表单处理是非常重要的一个功能。在这篇文章中,我们将会讲解如何使用Flask来处理表单。在我们开始之前,假定您已经熟悉Flask的基础知识,如创建应用程序、路由、模板等。 我们将会分为以下几个步骤介绍如何完成整个表单处理过程: 创建HTML表单 首先,我们需要在HTML页面上创建一个表单。表单需要有一个action,method和一个提交按钮。下面…

    Flask 2023年3月13日
    00
  • Flask中特殊装饰器的使用

    下面我将给出一个完整的Flask中特殊装饰器的使用攻略。 一、介绍 在 Flask 中,我们可以使用特殊装饰器来扩展 Flask 的功能。Flask 提供了很多特殊装饰器,比如 @app.route、@app.before_request、@app.after_request 等等,这些装饰器可以把一些特定的函数绑定到 Flask 的请求处理过程中,实现对请…

    Flask 2023年5月16日
    00
  • Flask-Sqlalchemy的基本使用详解

    下面是关于”Flask-Sqlalchemy的基本使用详解”的完整攻略,包括两个示例说明。 什么是Flask-Sqlalchemy Flask-Sqlalchemy是Flask框架中的一个扩展,其提供了对SQLAlchemy ORM的集成支持。其主要提供了以下功能: 方便地在Flask应用程序中使用数据库。 管理数据库模型,自动生成SQL语句。 安装Flas…

    Flask 2023年5月15日
    00
  • 使用Python FastAPI构建Web服务的实现

    使用Python FastAPI构建Web服务的实现可以分为以下步骤: 1. 安装FastAPI FastAPI是一个基于Python的Web框架,提供了快速、简单和易于使用的方式来构建Web API。您可以使用以下命令在Python环境中安装FastAPI: pip install fastapi 2. 安装uvicorn uvicorn是一个Python…

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