Python之Flask开发框架(第一篇) — 从安装到第一个应用 本文聚焦于Flask 的基础入门涵盖安装、第一个应用、基本概念、项目结构、路由与视图函数。引言Flask 是一个使用 Python 编写的轻量级 Web 应用框架。它被设计为“微型”框架但并不意味着它功能薄弱相反Flask 提供了构建 Web 应用所需的核心组件同时保持了极高的灵活性和可扩展性。对于初学者来说Flask 的学习曲线平缓能让你快速理解 Web 开发的核心概念对于高级开发者Flask 又能通过丰富的扩展支持复杂应用的开发。本教程将带你从零开始完成 Flask 的安装创建第一个 Flask 应用并深入解析 Flask 的基本概念、项目结构、路由与视图函数。1. Flask 安装在开始之前请确保你的电脑上已经安装了 Python 3.8 或更高版本。推荐使用虚拟环境来隔离项目依赖。1.1 创建虚拟环境# 在项目目录下执行python-mvenv venv1.2 激活虚拟环境Windows:venv\Scripts\activatemacOS / Linux:sourcevenv/bin/activate1.3 安装 Flaskpipinstallflask安装完成后可以通过以下命令验证是否成功python-cimport flask; print(flask.__version__)如果正确输出版本号如2.3.x说明安装成功。2. Flask 第一个应用我们来创建一个最简单的 Flask 应用只需几行代码。2.1 创建app.pyfromflaskimportFlask# 创建 Flask 实例appFlask(__name__)# 定义路由与视图函数app.route(/)defhello():returnHello, World!# 启动应用if__name____main__:app.run(debugTrue)2.2 运行应用python app.py终端会输出类似以下内容* Serving Flask app app * Debug mode: on * Running on http://127.0.0.1:5000 (Press CTRLC to quit)打开浏览器访问http://127.0.0.1:5000你将看到Hello, World!。2.3 代码解析Flask(__name__)创建一个 Flask 应用实例。__name__是当前模块的名称Flask 用它来定位模板和静态文件的位置。app.route(/)这是一个装饰器用于将 URL 路径/与下面的函数绑定。当用户访问根路径时Flask 会调用该函数。return Hello, World!视图函数返回的字符串将作为 HTTP 响应体发送给客户端。app.run(debugTrue)启动内置的开发服务器。debugTrue开启调试模式代码修改后服务器会自动重启并在出错时显示详细的错误页面。3. Flask 基本概念在深入开发之前我们需要理解 Flask 中的几个核心概念。3.1 应用ApplicationFlask 应用是Flask类的一个实例。它负责接收 HTTP 请求根据路由规则分发到对应的视图函数并将响应返回给客户端。3.2 路由Route路由是将 URL 映射到 Python 函数的机制。Flask 使用app.route装饰器来定义路由。路由不仅可以匹配静态路径还可以包含动态部分。app.route(/user/username)defshow_user(username):returnfUser:{username}3.3 视图函数View Function视图函数是处理请求并返回响应的函数。它可以是普通的 Python 函数其返回值会自动转换为 HTTP 响应对象。3.4 请求Request当客户端发送请求时Flask 会创建一个request对象其中包含了请求的所有信息如请求头、表单数据、查询参数等。通过from flask import request导入后即可在视图函数中使用。3.5 响应Response视图函数的返回值可以是字符串、字典、元组或Response对象。Flask 会自动将其转换为一个标准的 HTTP 响应。# 返回字符串returnHello# 返回状态码returnNot Found,404# 返回字典自动转为 JSONreturn{key:value}4. Flask 项目结构随着项目规模增长良好的项目结构至关重要。这里介绍一种常见的 Flask 项目布局即使是一个简单应用也建议遵循这种结构以便将来扩展。my_flask_project/ ├── app/ │ ├── __init__.py # 应用工厂 │ ├── routes.py # 路由与视图 │ ├── models.py # 数据模型 │ ├── forms.py # 表单类 │ ├── templates/ # 模板文件 │ └── static/ # 静态文件CSS, JS, 图片 ├── config.py # 配置文件 ├── run.py # 启动入口 └── requirements.txt # 依赖列表4.1 使用应用工厂app/__init__.py中定义一个函数用于创建应用实例。这样做可以方便地加载不同配置、进行测试。fromflaskimportFlaskdefcreate_app(config_classNone):appFlask(__name__)ifconfig_class:app.config.from_object(config_class)# 注册路由fromappimportroutes routes.init_app(app)returnapp4.2 分离路由将路由定义放在routes.py中并通过init_app函数注册到应用上。# app/routes.pydefinit_app(app):app.route(/)defindex():returnHello from structured app!4.3 启动文件run.py作为项目启动入口fromappimportcreate_app appcreate_app()if__name____main__:app.run(debugTrue)5. Flask 路由详解路由是 Web 应用的入口。Flask 的路由系统灵活而强大。5.1 基本路由app.route(/)defindex():returnHomeapp.route(/about)defabout():returnAbout5.2 动态路由在 URL 中使用variable来捕获路径中的值。默认类型为string。app.route(/user/username)defprofile(username):returnfHello,{username}Flask 支持多种转换器转换器说明string默认匹配除/外的任意字符串int匹配整数float匹配浮点数path匹配包含/的字符串uuid匹配 UUID 字符串app.route(/post/int:post_id)defshow_post(post_id):returnfPost ID:{post_id}5.3 HTTP 方法路由默认只响应GET请求。可以通过methods参数指定支持的 HTTP 方法。fromflaskimportrequestapp.route(/login,methods[GET,POST])deflogin():ifrequest.methodPOST:return处理登录else:return显示登录表单5.4 路由构建URL 反向生成使用url_for函数可以根据视图函数名生成 URL避免硬编码。fromflaskimporturl_forapp.route(/)defindex():login_urlurl_for(login)# 结果为 /loginreturnfLogin at{login_url}对于动态路由url_for(profile,usernamealice)# 结果为 /user/alice6. Flask 视图函数深入视图函数是应用的核心逻辑所在理解其返回值与请求处理机制十分重要。6.1 返回 JSON 数据在构建 API 时常需要返回 JSON。Flask 提供了jsonify函数它能自动设置正确的Content-Type并返回 JSON。fromflaskimportjsonifyapp.route(/api/user)defapi_user():returnjsonify({name:Alice,age:30})6.2 重定向使用redirect函数可以重定向到其他 URL。fromflaskimportredirect,url_forapp.route(/old)defold_page():returnredirect(url_for(new_page))6.3 中止请求使用abort函数可以提前终止请求并返回指定的 HTTP 错误码。fromflaskimportabortapp.route(/secret)defsecret():ifnotuser_authorized():abort(403)# 返回 403 ForbiddenreturnSecret content6.4 请求对象request对象包含了当前请求的所有信息。常用属性fromflaskimportrequestapp.route(/submit,methods[POST])defsubmit():# 获取表单数据namerequest.form.get(name)# 获取查询参数GET 参数pagerequest.args.get(page,default1,typeint)# 获取 JSON 数据datarequest.get_json()# 获取请求头user_agentrequest.headers.get(User-Agent)returnOK6.5 会话SessionFlask 提供了会话功能用于在多次请求之间保存用户数据。会话数据默认存储在客户端的加密 cookie 中。fromflaskimportsession app.secret_keyyour-secret-key# 必须设置用于签名app.route(/set)defset_session():session[user]alicereturnSession setapp.route(/get)defget_session():usersession.get(user,Guest)returnfUser:{user}总结本篇教程我们完成了以下内容安装 Flask使用虚拟环境隔离项目并通过pip安装。第一个应用创建了最简单的“Hello, World!”应用并解析了各部分的含义。基本概念介绍了应用、路由、视图函数、请求与响应的核心概念。项目结构讲解了如何组织 Flask 项目并介绍了应用工厂模式。路由详解包括基本路由、动态路由、HTTP 方法、url_for反向生成。视图函数深入涵盖了返回 JSON、重定向、请求对象、会话等常用操作。这些知识构成了 Flask 开发的基础下一篇教程中我们将深入探讨模板渲染、表单处理和数据库操作带你构建功能更完整的 Web 应用。