📜  fro flask import Flask, request, render_template, url_for, redirect, session - Python (1)

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

使用 Flask 进行 Web 开发

Flask 是一个基于 Python 的 Web 框架,它提供了大量工具和生态系统来简化 Web 应用程序的开发。开发者可以使用 Flask 快速构建轻量级的 Web 应用程序,同时也可以使用 Flask 扩展库来满足定制化的需求。

安装 Flask

在开始使用 Flask 之前,需要确保已经安装了 Python。安装 Python 后,可以通过 pip 命令来安装 Flask:

pip install Flask

如果想要开发数据库应用程序,还需要安装 Flask 对应的数据库驱动,例如 MySQL、PostgreSQL 或 SQLite。

创建一个简单的 Flask 应用
from flask import Flask

app = Flask(__name__)

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

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

这个应用程序定义了一个路由处理函数,当浏览器请求应用程序的根 URL 时,将返回一个简单的消息。要启动这个应用程序,可以运行这个脚本,然后打开浏览器并访问 http://localhost:5000。

Flask 路由

Flask 应用程序中的路由是 URL 和函数之间的映射。可以通过 @app.route 装饰器来定义路由:

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

这个路由将匹配 /hello 的请求,并返回一个简单的消息。

可以给路由定义一个动态参数,例如:

@app.route('/hello/<name>')
def hello_name(name):
    return 'Hello, {}!'.format(name)

这个路由将匹配类似 /hello/john 的请求,并将 john 作为 name 参数传递到路由处理函数中。

Flask 模板

Flask 中的模板引擎提供了一种通过 HTML 文件来渲染 Web 页面的简单方式。可以使用渲染函数来渲染模板。Flask 中使用 Jinja2 作为默认的模板引擎。

在 Flask 应用程序中使用模板,需要先加载模板文件,然后将数据传递到模板。可以通过 Flask 的 render_template() 函数来实现。

from flask import render_template

@app.route('/hello/<name>')
def hello_name(name):
    return render_template('hello.html', name=name)

这个路由处理函数使用 Flask 的内置的 render_template 函数来加载 hello.html 模板,并将 name 变量传递到模板中。

Flask 表单

在 Web 应用程序中,表单是一种常见的用户交互方式。Flask 提供了方便的方式来处理表单数据。

Flask 中的表单需要一个 HTML 表单,以及一个对应的 Flask 路由,其中路由将接收表单提交时发送的数据。

在 Flask 中,可以使用 Flask-WTF 扩展来处理表单。这个扩展提供了一种简单的方式来定义和验证表单。

首先需要安装 Flask-WTF:

pip install Flask-WTF

然后可以创建一个简单的表单:

from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

class NameForm(FlaskForm):
    name = StringField('What is your name?', validators=[DataRequired()])
    submit = SubmitField('Submit')

这个表单包含一个文本字段和一个提交按钮。文本字段包含一个标签和验证器。标签将在表单中显示,验证器将确保该字段不为空。

接下来,需要在视图函数中处理表单。可以使用 Flask 常规的路由处理方式来处理表单提交:

from flask import render_template
from app import app
from app.forms import NameForm

@app.route('/', methods=['GET', 'POST'])
def index():
    form = NameForm()
    if form.validate_on_submit():
        return redirect('/hello/' + form.name.data)

    return render_template('index.html', form=form)

这个路由将在 GET 请求中返回一个包含表单的 HTML 页面,它将在 POST 请求中处理表单提交,并重定向到另一个页面。

Flask 扩展

Flask 的最大优势之一是扩展。Flask 的扩展提供了额外的功能,包括数据库访问、表单处理、验证、认证、缓存等等。

安装 Flask 扩展通常很容易。只需要使用 pip 来安装即可。例如,要安装 Flask-Migrate 扩展:

pip install Flask-Migrate

然后在应用程序中初始化这个扩展:

from flask_migrate import Migrate
from app import app, db

migrate = Migrate(app, db)

这个扩展将提供数据库迁移功能,用于管理数据库架构变更。

Flask 中间件

中间件是一段被插入到处理函数之前或之后的代码。Flask 中的中间件可以用于在请求处理过程中完成各种任务,包括请求验证、日志记录、错误处理等等。

Flask 中间件可以使用 Flask 的装饰器来定义,例如,在应用程序中创建一个简单的中间件:

from flask import Flask

app = Flask(__name__)

@app.before_request
def before_request():
    print('Before Request')

@app.after_request
def after_request(response):
    print('After Request')
    return response

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

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

这个应用程序定义了两个中间件函数,它们将在请求处理之前和之后执行。before_request 中间件函数将在每个请求处理之前打印一条消息,而 after_request 中间件函数将在请求处理完成之后打印一条消息。