Python web实战 | 使用Flask框架进行Web开发

概要

本文将介绍Flask和Python,两个非常流行和易于使用的工具,来帮助你快速创建你自己的Web应用。


1、Flask简介

Flask是一个基于Python的Web框架。它是一个轻量级框架,非常适合小型项目和快速原型开发。Flask提供了一个简单的API,使得开发者可以快速构建Web应用。Flask的灵活性和可扩展性是它受欢迎的原因之一。

2、Flask的安装和基本使用

首先你需要确保你的机器上安装了Python,然后运行以下命令来安装Flask:

复制代码
pip install flask

这将安装Flask及其依赖项。完成安装后,你可以开始构建你的第一个Flask应用程序。以下是一个简单的示例:

复制代码
from flask import Flask

app = Flask(__name__)

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

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

在这个示例中,我们首先导入了Flask类。然后,我们创建了一个Flask应用程序实例,并将其存储在名为"app"的变量中。接下来,我们使用Flask的route装饰器来定义一个路由。这个路由指定了我们的应用程序将如何响应根路径('/')。最后,我们使用Flask的run方法来启动我们的应用程序。

运行这个示例后,你可以在浏览器中访问http://localhost:5000/ ↗,应该会看到"Hello, World!"的字样。

3、Flask的路由和视图函数

在Flask中,路由是指URL和应用程序之间的映射关系。路由告诉Flask应用程序如何响应来自客户端的请求。在Flask中,你可以使用route装饰器来定义一个路由。

视图函数是指Flask应用程序中与路由相关联的Python函数。视图函数负责处理来自客户端的请求,并返回响应。在Flask中,你可以使用route装饰器来将一个视图函数绑定到一个路由上。

以下是一个简单的示例,介绍如何在Flask中定义路由和视图函数:

复制代码
from flask import Flask

app = Flask(__name__)

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

@app.route('/about')
def about():
    return 'About us'

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

在这个示例中,我们定义了两个路由:'/'和'/about'。'/'是默认路由,当我们访问根路径时,将调用index函数。'/about'是自定义路由,当我们访问'/about'路径时,将调用about函数。

4、Flask的模板引擎

Flask的模板引擎使得开发者可以将动态内容插入到HTML页面中。这使得开发者可以更轻松地构建复杂的Web应用程序。

Flask支持多种模板引擎,包括Jinja2和Mako。在本篇文章中,我们将使用Jinja2作为我们的模板引擎。

要使用Jinja2,我们需要创建一个名为templates的目录,并在其中创建一个HTML模板文件。以下是一个示例:

复制代码
<!DOCTYPE html>
<html>
  <head>
    <title>{{ title }}</title>
  </head>
  <body>
    <h1>{{ title }}</h1>
    <p>{{ content }}</p>
  </body>
</html>

在这个示例中,我们定义了一个HTML模板,它有两个变量:title和content。这些变量将在渲染模板时传递给模板引擎。要渲染这个模板,我们需要在视图函数中使用render_template函数:

复制代码
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html', title='Home', content='Welcome to my website!')

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

在这个示例中,我们将index.html模板渲染为响应。我们还向模板传递了两个变量:title和content。这些变量将在模板中使用双括号(如{{ title }})包裹起来,以表示它们是变量。

5、Flask的表单处理

在Web应用程序中,表单是一种常见的用户输入方式。Flask提供了一个名为Flask-WTF(不是粗口)的插件,使得开发者可以轻松地处理Web表单。

首先,我们需要安装Flask-WTF插件。你可以使用以下命令来安装它:

复制代码
pip install flask-wtf

接下来,我们需要创建一个名为forms.py的文件,其中包含我们的表单定义:

复制代码
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')

在这个示例中,我们定义了一个名为NameForm的表单,它包含一个名为name的字符串字段和一个名为submit的提交按钮。字符串字段使用DataRequired验证器,以确保用户已经输入了名字。

在视图函数中使用这个表单:

复制代码
from flask import Flask, render_template, session, redirect, url_for
from forms import NameForm

app = Flask(__name__)
app.config['SECRET_KEY'] = 'hard to guess string'

@app.route('/', methods=['GET', 'POST'])
def index():
    form = NameForm()
    if form.validate_on_submit():
        session['name'] = form.name.data
        return redirect(url_for('index'))
    return render_template('index.html', form=form, name=session.get('name'))

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

在这个示例中,我们首先导入了NameForm表单。然后,我们在视图函数中创建了一个名为form的表单实例。如果表单被提交(即用户单击了提交按钮),我们将用户输入的名字存储在session中,并重定向到index页面。如果表单没有被提交,我们将渲染index.html模板,并向模板传递表单和session中存储的名字。

在HTML模板中,我们需要使用Flask-WTF提供的表单帮助器来生成表单。以下是一个示例:

复制代码
{% extends "base.html" %}

{% block content %}
  <h1>Hello, {{ name }}!</h1>
  <form method="POST" action="/">
    {{ form.hidden_tag() }}
    {{ form.name.label }} {{ form.name(size=20) }}
    {{ form.submit }}
  </form>
{% endblock %}

在这个示例中,我们使用hidden_tag帮助器生成一个隐藏的CSRF令牌,以防止跨站点请求伪造攻击。然后,我们使用label和name帮助器生成表单字段的标签和输入框。最后,我们使用submit帮助器生成提交按钮。

技术总结

我们介绍了Flask框架基本使用,并展示了如何使用它们来创建Web应用程序,学习了Flask的基本使用,包括路由和视图函数,以及如何使用Jinja2模板引擎和Flask-WTF插件来处理表单。这只是Flask的基础,Flask还有很多其他功能和插件,例如数据库集成、认证和授权、RESTful API等等。

欢迎点赞收藏转发,感谢🙏

相关推荐
Gigavision4 小时前
基于BUAA-MIHR数据集的噪声解耦对比学习算法
人工智能·python·深度学习·算法
IPdodo_5 小时前
跨境 API 调用不稳定怎么办:出口、超时重试与链路监控的实践
网络·python·网络协议
aramae5 小时前
模拟实现strcmp()(C语言)
c语言·开发语言·后端
Madison-No75 小时前
搭建项目测试环境
linux·运维·服务器·python
计算机编程-吉哥6 小时前
YOLO26 vs YOLO11 vs YOLOv8:深度学习咖啡果实成熟度分割系统【计算机毕业设计选题推荐】
人工智能·python·深度学习·yolo·django·毕业设计
泡海椒6 小时前
PDF 表格样式优化:jquick-pdf 边框、圆角、背景色
java·开发语言·pdf
大衛說6 小时前
11 · 异常处理与日志
python
auto_go7 小时前
Python 实战指南(7)——账本动不动就崩?先把“魔法字符串”和“裸报错”干掉
python
Beyond_System|系统之外7 小时前
【学编程】Python基础编程题100道(21-60)
开发语言·python·算法
根目录下的猫7 小时前
RK3588适配的轻量级AI模型推荐
人工智能·后端·python·目标检测