本文聚焦于 Flask 的基础入门,涵盖安装、第一个应用、基本概念、项目结构、路由与视图函数。
Flask 是一个使用 Python 编写的轻量级 Web 应用框架。它被设计为“微型”框架,但并不意味着它功能薄弱;相反,Flask 提供了构建 Web 应用所需的核心组件,同时保持了极高的灵活性和可扩展性。对于初学者来说,Flask 的学习曲线平缓,能让你快速理解 Web 开发的核心概念;对于高级开发者,Flask 又能通过丰富的扩展支持复杂应用的开发。
本教程将带你从零开始,完成 Flask 的安装,创建第一个 Flask 应用,并深入解析 Flask 的基本概念、项目结构、路由与视图函数。
在开始之前,请确保你的电脑上已经安装了 Python 3.8 或更高版本。推荐使用虚拟环境来隔离项目依赖。
# 在项目目录下执行
python -m venv venv
venv\Scripts\activate
source venv/bin/activate
pip install flask
安装完成后,可以通过以下命令验证是否成功:
python -c"import flask; print(flask.__version__)"
如果正确输出版本号(如 2.3.x),说明安装成功。
我们来创建一个最简单的 Flask 应用,只需几行代码。
app.pyfrom flask import Flask
# 创建 Flask 实例
app = Flask(__name__)
# 定义路由与视图函数
@app.route('/')
defhello():
return'Hello, World!'
# 启动应用
if __name__ =='__main__':
app.run(debug=True)
python app.py
终端会输出类似以下内容:
* Serving Flask app 'app'
* Debug mode: on
* Running on http://127.0.0.1:5000 (Press CTRL+C to quit)
打开浏览器访问 http://127.0.0.1:5000,你将看到 Hello, World!。
Flask(__name__)__name__ 是当前模块的名称,Flask 用它来定位模板和静态文件的位置。@app.route('/')/ 与下面的函数绑定。当用户访问根路径时,Flask 会调用该函数。return 'Hello, World!'app.run(debug=True)debug=True 开启调试模式,代码修改后服务器会自动重启,并在出错时显示详细的错误页面。在深入开发之前,我们需要理解 Flask 中的几个核心概念。
Flask 应用是 Flask 类的一个实例。它负责接收 HTTP 请求,根据路由规则分发到对应的视图函数,并将响应返回给客户端。
路由是将 URL 映射到 Python 函数的机制。Flask 使用 @app.route 装饰器来定义路由。路由不仅可以匹配静态路径,还可以包含动态部分。
@app.route('/user/<username>')
defshow_user(username):
returnf'User: {username}'
视图函数是处理请求并返回响应的函数。它可以是普通的 Python 函数,其返回值会自动转换为 HTTP 响应对象。
当客户端发送请求时,Flask 会创建一个 request 对象,其中包含了请求的所有信息(如请求头、表单数据、查询参数等)。通过 from flask import request 导入后即可在视图函数中使用。
视图函数的返回值可以是字符串、字典、元组或 Response 对象。Flask 会自动将其转换为一个标准的 HTTP 响应。
# 返回字符串
return'Hello'
# 返回状态码
return'Not Found',404
# 返回字典(自动转为 JSON)
return{'key':'value'}
随着项目规模增长,良好的项目结构至关重要。这里介绍一种常见的 Flask 项目布局,即使是一个简单应用,也建议遵循这种结构,以便将来扩展。
my_flask_project/
├── app/
│ ├── __init__.py # 应用工厂
│ ├── routes.py # 路由与视图
│ ├── models.py # 数据模型
│ ├── forms.py # 表单类
│ ├── templates/ # 模板文件
│ └── static/ # 静态文件(CSS, JS, 图片)
├── config.py # 配置文件
├── run.py # 启动入口
└── requirements.txt # 依赖列表
app/__init__.py 中定义一个函数,用于创建应用实例。这样做可以方便地加载不同配置、进行测试。
from flask import Flask
defcreate_app(config_class=None):
app = Flask(__name__)
if config_class:
app.config.from_object(config_class)
# 注册路由
from app import routes
routes.init_app(app)
return app
将路由定义放在 routes.py 中,并通过 init_app 函数注册到应用上。
# app/routes.py
definit_app(app):
@app.route('/')
defindex():
return'Hello from structured app!'
run.py 作为项目启动入口:
from app import create_app
app = create_app()
if __name__ =='__main__':
app.run(debug=True)
路由是 Web 应用的入口。Flask 的路由系统灵活而强大。
@app.route('/')
defindex():
return'Home'
@app.route('/about')
defabout():
return'About'
在 URL 中使用 <variable> 来捕获路径中的值。默认类型为 string。
@app.route('/user/<username>')
defprofile(username):
returnf'Hello, {username}'
Flask 支持多种转换器:
string | / 外的任意字符串 |
int | |
float | |
path | / 的字符串 |
uuid |
@app.route('/post/<int:post_id>')
defshow_post(post_id):
returnf'Post ID: {post_id}'
路由默认只响应 GET 请求。可以通过 methods 参数指定支持的 HTTP 方法。
from flask import request
@app.route('/login', methods=['GET','POST'])
deflogin():
if request.method =='POST':
return'处理登录'
else:
return'显示登录表单'
使用 url_for 函数可以根据视图函数名生成 URL,避免硬编码。
from flask import url_for
@app.route('/')
defindex():
login_url = url_for('login')# 结果为 '/login'
returnf'Login at {login_url}'
对于动态路由:
url_for('profile', username='alice')# 结果为 '/user/alice'
视图函数是应用的核心逻辑所在,理解其返回值与请求处理机制十分重要。
在构建 API 时,常需要返回 JSON。Flask 提供了 jsonify 函数,它能自动设置正确的 Content-Type 并返回 JSON。
from flask import jsonify
@app.route('/api/user')
defapi_user():
return jsonify({'name':'Alice','age':30})
使用 redirect 函数可以重定向到其他 URL。
from flask import redirect, url_for
@app.route('/old')
defold_page():
return redirect(url_for('new_page'))
使用 abort 函数可以提前终止请求并返回指定的 HTTP 错误码。
from flask import abort
@app.route('/secret')
defsecret():
ifnot user_authorized():
abort(403)# 返回 403 Forbidden
return'Secret content'
request 对象包含了当前请求的所有信息。常用属性:
from flask import request
@app.route('/submit', methods=['POST'])
defsubmit():
# 获取表单数据
name = request.form.get('name')
# 获取查询参数(GET 参数)
page = request.args.get('page', default=1,type=int)
# 获取 JSON 数据
data = request.get_json()
# 获取请求头
user_agent = request.headers.get('User-Agent')
return'OK'
Flask 提供了会话功能,用于在多次请求之间保存用户数据。会话数据默认存储在客户端的加密 cookie 中。
from flask import session
app.secret_key ='your-secret-key'# 必须设置,用于签名
@app.route('/set')
defset_session():
session['user']='alice'
return'Session set'
@app.route('/get')
defget_session():
user = session.get('user','Guest')
returnf'User: {user}'
本篇教程我们完成了以下内容:
pip 安装。url_for 反向生成。这些知识构成了 Flask 开发的基础,下一篇教程中,我们将深入探讨 模板渲染、表单处理 和 数据库操作,带你构建功能更完整的 Web 应用。
欢迎关注公众号,感谢对文章的点赞分享喜欢,冉成未来会持续更新前后端开发技术、人工智能技术、IT相关的文章及学习经验、知识分享,未来虽然充满着不确定性,但我们可以不断提升自己,不断为未来做准备,让未来更好的自己成就更美好的未来。
Python基础系列 | Python之PyQt5基础知识(五)
Python基础系列 | Python之PyQt5基础知识(四)
Python基础系列 | Python之PyQt5基础知识(三)
Python基础系列 | Python之PyQt5基础知识(二)
Python基础系列 | Python之PyQt5基础知识(一)