Flask Web 开发:快速入门指南 – wiki大全

Flask Web Development: 快速入门指南

Flask 是一个轻量级的 Python Web 框架,以其简洁、灵活和易于上手而闻名。与 Django 等功能齐全的框架不同,Flask 不提供内置的 ORM、表单验证或认证等功能,而是让开发者根据需求自由选择和集成各种组件。这使得 Flask 非常适合小型项目、API 开发以及需要高度定制化的应用。

本指南将带你快速了解 Flask 的基本概念,并构建一个简单的 Web 应用。

1. 准备环境

在开始之前,确保你的系统上安装了 Python。推荐使用 Python 3.6 或更高版本。

1.1 创建虚拟环境 (推荐)

虚拟环境可以帮助你隔离项目依赖,避免不同项目之间的包冲突。

bash
python -m venv venv

1.2 激活虚拟环境

  • Windows:
    bash
    .\venv\Scripts\activate
  • macOS/Linux:
    bash
    source venv/bin/activate

1.3 安装 Flask

激活虚拟环境后,使用 pip 安装 Flask:

bash
pip install Flask

2. 第一个 Flask 应用:Hello, World!

创建一个名为 app.py 的文件,并添加以下代码:

“`python
from flask import Flask

创建 Flask 应用实例

app = Flask(name)

定义路由和视图函数

@app.route(‘/’)
def hello_world():
return ‘Hello, World!’

运行应用

if name == ‘main‘:
app.run(debug=True)
“`

代码解释:

  • from flask import Flask:从 flask 模块中导入 Flask 类。
  • app = Flask(__name__):创建一个 Flask 应用实例。__name__ 是当前模块的名称,Flask 用它来确定应用的根路径。
  • @app.route('/'):这是一个装饰器,用于将 hello_world 函数注册为处理根 URL (/) 的视图函数。
  • def hello_world()::视图函数,当用户访问根 URL 时,该函数会被调用并返回其结果作为 HTTP 响应。
  • app.run(debug=True):运行 Flask 应用。debug=True 开启调试模式,这将在代码更改时自动重新加载服务器,并在发生错误时提供详细的调试信息。

运行应用:

确保你的虚拟环境已激活,然后在终端中运行:

bash
python app.py

你将看到类似以下的输出:

* Serving Flask app 'app'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: XXX-XXX-XXX

在浏览器中访问 http://127.0.0.1:5000,你将看到 “Hello, World!”。

3. 路由 (Routing)

路由是将 URL 映射到视图函数的机制。你可以定义多个路由来处理不同的 URL。

3.1 动态路由

Flask 支持动态 URL,可以通过 <variable_name> 语法在 URL 中捕获变量。

修改 app.py

“`python
from flask import Flask

app = Flask(name)

@app.route(‘/’)
def hello_world():
return ‘Hello, World!’

@app.route(‘/user/‘)
def show_user_profile(username):
# 显示用户名的页面
return f’User: {username}’

@app.route(‘/post/‘)
def show_post(post_id):
# 显示指定 ID 的文章,int: 确保 post_id 是整数
return f’Post ID: {post_id}’

if name == ‘main‘:
app.run(debug=True)
“`

现在,你可以访问 http://127.0.0.1:5000/user/Alicehttp://127.0.0.1:5000/post/123 来查看动态路由的效果。Flask 会自动将 URL 中的捕获值作为参数传递给视图函数。

4. 模板 (Templates)

在实际的 Web 应用中,我们通常需要生成包含 HTML、CSS 和 JavaScript 的动态页面。Flask 使用 Jinja2 作为其默认的模板引擎。

4.1 创建 templates 文件夹

在你的项目根目录下创建一个名为 templates 的文件夹。Flask 会自动在该文件夹中查找模板文件。

4.2 创建 HTML 模板

templates 文件夹中创建一个名为 index.html 的文件:

“`html






{{ title }}

{{ greeting }}

Welcome to our Flask application!

{% if name %}

Hello, {{ name }}!

{% else %}

Please tell us your name.

{% endif %}

    {% for item in items %}

  • {{ item }}
  • {% endfor %}


“`

Jinja2 模板语法要点:

  • {{ variable }}:用于在模板中显示变量的值。
  • {% control_structure %}:用于控制结构,例如 if/else 语句和 for 循环。

4.3 在 Flask 应用中使用模板

修改 app.py 以使用 render_template 函数:

“`python
from flask import Flask, render_template

app = Flask(name)

@app.route(‘/’)
def index():
return render_template(
‘index.html’,
title=’Home Page’,
greeting=’Welcome to Flask!’,
name=’Gemini’,
items=[‘Item 1’, ‘Item 2’, ‘Item 3’]
)

@app.route(‘/about’)
def about():
return render_template(
‘index.html’,
title=’About Us’,
greeting=’About Our Project’,
name=None, # 不传递 name
items=[] # 空列表
)

if name == ‘main‘:
app.run(debug=True)
“`

代码解释:

  • from flask import Flask, render_template:导入 render_template 函数。
  • render_template('index.html', ...):这个函数会查找 templates 文件夹中的 index.html 文件,并将传入的关键字参数作为变量传递给模板。

现在,重新运行 app.py,并在浏览器中访问 http://127.0.0.1:5000http://127.0.0.1:5000/about 来查看模板渲染的效果。

5. 请求 (Request) 和响应 (Response)

Flask 提供了 request 全局对象来访问传入的请求数据,以及多种方式来构建响应。

5.1 获取请求数据

修改 app.py

“`python
from flask import Flask, render_template, request

app = Flask(name)

@app.route(‘/’)
def index():
user_name = request.args.get(‘name’) # 获取 URL 查询参数 ‘name’
return render_template(
‘index.html’,
title=’Home Page’,
greeting=’Welcome to Flask!’,
name=user_name,
items=[‘Item 1’, ‘Item 2’, ‘Item 3’]
)

@app.route(‘/login’, methods=[‘GET’, ‘POST’])
def login():
if request.method == ‘POST’:
username = request.form[‘username’]
password = request.form[‘password’]
# 在这里处理登录逻辑
return f’Login attempt from {username} with password {password}’
return ”’

”’

if name == ‘main‘:
app.run(debug=True)
“`

代码解释:

  • request.args.get('name'):用于获取 URL 查询字符串中的参数,例如 ?name=Alice
  • @app.route('/login', methods=['GET', 'POST']):指定该路由可以处理 GET 和 POST 请求。
  • request.method == 'POST':检查请求是否为 POST 方法。
  • request.form['username']:用于获取表单提交的数据。

现在,访问 http://127.0.0.1:5000/?name=Bob,或者访问 http://127.0.0.1:5000/login 并提交表单来测试。

6. 静态文件 (Static Files)

Web 应用通常需要提供 CSS 文件、JavaScript 文件和图片等静态资源。Flask 默认会在项目根目录下的 static 文件夹中查找静态文件。

6.1 创建 static 文件夹

在项目根目录下创建 static 文件夹,并在其中创建一个 style.css 文件:

“`css
/ static/style.css /
body {
font-family: sans-serif;
margin: 20px;
background-color: #f4f4f4;
color: #333;
}

h1 {
color: #0056b3;
}

ul {
list-style-type: disc;
margin-left: 20px;
}
“`

6.2 在模板中链接静态文件

修改 templates/index.html,在 <head> 中添加对 style.css 的引用:

“`html






{{ title }}

{{ greeting }}

Welcome to our Flask application!

{% if name %}

Hello, {{ name }}!

{% else %}

Please tell us your name.

{% endif %}

    {% for item in items %}

  • {{ item }}
  • {% endfor %}


“`

代码解释:

  • {{ url_for('static', filename='style.css') }}url_for 函数用于为指定的端点生成 URL。在这里,它为 static 文件夹中的 style.css 文件生成正确的 URL。

重新运行应用,你会发现页面现在应用了 style.css 中的样式。

7. 调试模式 (Debug Mode)

在开发过程中,debug=True 参数非常有用。它提供了以下功能:

  • 自动重载: 当你的代码发生改变时,服务器会自动重新加载。
  • 交互式调试器: 当应用出现错误时,浏览器中会显示一个交互式调试器,允许你检查变量、执行代码等,帮助你快速定位问题。

重要提示: debug=True 仅用于开发环境,切勿在生产环境中使用,因为它存在安全风险。

总结

本快速入门指南涵盖了 Flask Web 开发的基础知识:

  • 环境搭建
  • 创建第一个应用
  • 定义路由和视图函数
  • 处理动态 URL
  • 使用 Jinja2 模板引擎渲染 HTML 页面
  • 获取请求数据
  • 集成静态文件
  • 理解调试模式

通过这些基本概念,你已经掌握了使用 Flask 构建简单 Web 应用的能力。要构建更复杂的应用,你还需要学习如何与数据库交互、管理用户会话、处理表单验证、以及部署你的应用等高级主题。Flask 的灵活性意味着你可以根据项目的具体需求,自由选择和集成最适合你的第三方库和工具。

滚动至顶部