当前位置: 首页 > news >正文

Python之Flask快速入门

Python Flask 快速入门指南

  • Flask 是一款轻量级的 Python Web 框架,以其简洁、灵活的特点深受开发者喜爱,尤其适合快速构建小型 Web 应用、API 接口或原型项目。本指南将从环境搭建到实战开发,带你快速掌握 Flask 的核心用法。
  • 视频资料:https://pan.quark.cn/s/8048e6e25670https://pan.quark.cn/s/aae0c994b9d2

一、环境准备

在使用 Flask 前,需先完成 Python 环境配置和 Flask 安装。

1. 确认 Python 环境

Flask 支持 Python 3.8 及以上版本(截至 2024 年 5 月,推荐使用 3.10+)。
打开终端/命令行,输入以下命令验证 Python 是否安装成功:

python --version  # Windows 系统
# 或
python3 --version  # macOS/Linux 系统

若输出类似 Python 3.11.4 的信息,说明 Python 环境正常。

2. 安装 Flask

推荐使用 虚拟环境(避免依赖冲突)安装 Flask,步骤如下:

步骤 1:创建虚拟环境
  • Windows(CMD/PowerShell)
    # 新建项目文件夹(例如 flask-demo)
    mkdir flask-demo && cd flask-demo
    # 创建虚拟环境(venv 是虚拟环境名称,可自定义)
    python -m venv venv
    # 激活虚拟环境
    venv\Scripts\activate
    
  • macOS/Linux(终端)
    # 新建项目文件夹
    mkdir flask-demo && cd flask-demo
    # 创建虚拟环境
    python3 -m venv venv
    # 激活虚拟环境
    source venv/bin/activate
    

激活成功后,终端提示符前会显示 (venv),表示当前处于虚拟环境中。

步骤 2:安装 Flask

在虚拟环境中,使用 pip 安装 Flask:

pip install flask

安装完成后,输入 flask --version 验证,若输出类似以下信息则安装成功:

Flask 2.3.3
Python 3.11.4 (main, Jun 12 2023, 15:11:40) [GCC 11.2.0]

二、第一个 Flask 应用:Hello World

Flask 应用的核心是「应用实例」,所有路由、视图函数都依赖于这个实例。下面编写一个最简单的 Flask 应用。

1. 编写代码

flask-demo 文件夹中,新建文件 app.py,输入以下代码:

# 从 flask 库中导入 Flask 类
from flask import Flask# 创建 Flask 应用实例(__name__ 表示当前模块名,Flask 会据此查找资源路径)
app = Flask(__name__)# 定义路由:当用户访问根路径(/)时,触发下方的视图函数
@app.route('/')
def hello_world():# 视图函数的返回值会作为响应内容返回给浏览器return 'Hello, Flask!'# 当脚本直接运行时(而非被导入),启动 Flask 开发服务器
if __name__ == '__main__':app.run(debug=True)  # debug=True 开启调试模式(代码修改后自动重启服务器)

2. 运行应用

在终端(确保处于虚拟环境和 flask-demo 文件夹下)输入以下命令:

python app.py

若运行成功,终端会输出类似信息:

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

3. 访问应用

打开浏览器,输入地址 http://127.0.0.1:5000(或 http://localhost:5000),页面会显示 Hello, Flask!,表示第一个应用运行成功。

三、核心概念解析

Flask 的核心功能围绕「路由」「视图函数」「模板」「请求与响应」展开,理解这些概念是开发的基础。

1. 路由(Route)

路由是 URL 路径与视图函数的映射关系,通过 @app.route('/路径') 装饰器定义。
例如:

# 访问 /about 时,触发 about 函数
@app.route('/about')
def about():return '这是关于页面'# 访问 /user/xxx 时,xxx 会作为参数传入函数(<变量名> 定义动态参数)
@app.route('/user/<username>')
def show_user(username):return f'欢迎你,{username}!'# 限定参数类型(int 表示只能接收整数)
@app.route('/post/<int:post_id>')
def show_post(post_id):return f'文章 ID:{post_id}'

运行应用后,访问 http://127.0.0.1:5000/user/张三 会显示 欢迎你,张三!,访问 http://127.0.0.1:5000/post/123 会显示 文章 ID:123

2. HTTP 请求方法

默认情况下,@app.route 只接收 GET 请求。若需支持 POST(表单提交)、PUT 等方法,需通过 methods 参数指定:

from flask import request  # 导入 request 对象,用于获取请求数据@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'POST':# 处理 POST 请求(例如获取表单数据)username = request.form.get('username')  # 从表单中获取 usernamepassword = request.form.get('password')return f'登录请求:用户名={username}, 密码={password}'else:# 处理 GET 请求(例如返回登录表单页面)return '''<form method="post">用户名: <input type="text" name="username"><br>密码: <input type="password" name="password"><br><button type="submit">登录</button></form>'''

访问 http://127.0.0.1:5000/login 会显示登录表单,提交后会触发 POST 逻辑并返回表单数据。

3. 模板(Templates)

Flask 支持使用 Jinja2 模板引擎 渲染 HTML 页面,实现「逻辑与视图分离」。模板文件需放在项目根目录的 templates 文件夹中(Flask 会自动查找该目录)。

步骤 1:创建模板文件

flask-demo 中新建 templates 文件夹,再在其中新建 index.html

<!-- templates/index.html -->
<!DOCTYPE html>
<html>
<head><title>{{ title }}</title>  <!-- Jinja2 变量:由视图函数传入 -->
</head>
<body><h1>欢迎来到 {{ name }} 的博客!</h1><!-- 循环渲染列表 --><ul>{% for post in posts %}<li>{{ post.title }} - {{ post.date }}</li>{% endfor %}</ul>
</body>
</html>
步骤 2:在视图函数中渲染模板

修改 app.py,导入 render_template 函数,并编写视图函数:

from flask import render_template@app.route('/blog')
def blog():# 模拟数据(实际项目中可能来自数据库)blog_posts = [{'title': 'Flask 入门', 'date': '2024-05-01'},{'title': 'Jinja2 模板', 'date': '2024-05-02'},{'title': 'Flask 数据库', 'date': '2024-05-03'}]# 渲染模板:第一个参数是模板文件名,后续参数是传递给模板的变量return render_template('index.html', title='我的博客', name='小明', posts=blog_posts)
步骤 3:访问效果

运行应用后,访问 http://127.0.0.1:5000/blog,会看到渲染后的 HTML 页面,包含动态传入的标题、用户名和文章列表。

4. 静态文件(Static Files)

CSS、JavaScript、图片等静态文件需放在 static 文件夹中(Flask 自动识别),在模板中通过 url_for('static', filename='路径') 引用。

示例:添加 CSS 样式
  1. flask-demo 中新建 static/css 文件夹,创建 style.css

    /* static/css/style.css */
    h1 {color: #2c3e50;text-align: center;
    }
    ul {list-style: none;width: 500px;margin: 0 auto;
    }
    li {padding: 8px;border-bottom: 1px solid #eee;
    }
    
  2. templates/index.html<head> 中引用 CSS:

    <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
    
  3. 刷新 http://127.0.0.1:5000/blog,会看到页面样式已生效。

5. 请求与响应

Flask 提供 requestresponse 对象处理 HTTP 交互:

  • request:封装客户端发送的请求数据,常用属性/方法:

    • request.method:请求方法(GET/POST 等)
    • request.args:获取 URL 参数(如 /search?keyword=flask 中的 keyword
    • request.form:获取表单数据(POST 请求)
    • request.files:获取上传的文件
  • response:控制服务器返回的响应,常用方式:

    • 直接返回字符串(自动转为 200 OK 响应)
    • 使用 render_template 返回 HTML 响应
    • 使用 redirect(url) 重定向(如登录成功后跳转到首页)
    • 使用 make_response 自定义响应(如设置 Cookie、响应头)
示例:URL 参数与重定向
from flask import request, redirect, url_for# 处理 URL 参数(/search?keyword=xxx)
@app.route('/search')
def search():keyword = request.args.get('keyword', '默认关键词')  # 第二个参数是默认值return f'搜索关键词:{keyword}'# 重定向示例
@app.route('/old-path')
def old_path():# 重定向到 /blog 路径(url_for('blog') 会自动生成 /blog 的 URL)return redirect(url_for('blog'))

四、常用扩展推荐

Flask 本身功能精简,可通过扩展实现复杂需求,以下是常用扩展:

扩展名称功能描述安装命令
Flask-SQLAlchemyORM 工具,简化数据库操作(支持 MySQL、SQLite 等)pip install flask-sqlalchemy
Flask-WTF处理表单验证(防 CSRF 攻击、字段验证等)pip install flask-wtf
Flask-Login管理用户登录状态(登录、注销、记住密码等)pip install flask-login
Flask-Migrate数据库迁移工具(更新表结构时保留数据)pip install flask-migrate
Flask-RESTful快速构建 RESTful API 接口pip install flask-restful

五、部署注意事项

开发阶段使用 app.run(debug=True) 启动的是开发服务器,性能差、不安全,不能用于生产环境。生产环境推荐使用以下方案:

  1. 使用 Gunicorn 作为 WSGI 服务器(适用于 Linux/macOS):

    # 安装 Gunicorn
    pip install gunicorn
    # 启动应用(app:app 表示从 app.py 中导入 app 实例,--workers 4 表示4个进程)
    gunicorn -w 4 -b 0.0.0.0:5000 app:app
    
  2. 搭配 Nginx 作为反向代理:处理静态文件、负载均衡、SSL 加密等,提升性能和安全性。

  3. 关闭 Debug 模式:生产环境中必须设置 debug=False,避免泄露代码和敏感信息。

http://www.dtcms.com/a/349878.html

相关文章:

  • Redis类型之List
  • 自然语言处理——07 BERT、ELMO、GTP系列模型
  • lesson46-1:Linux 常用指令全解析:从基础操作到高效应用
  • Docker:常用命令、以及设置别名
  • 数据挖掘 6.1 其他降维方法(不是很重要)
  • 聊聊负载均衡架构
  • 关于窗口关闭释放内存,主窗口下的子窗口关闭释放不用等到主窗口关闭>setAttribute(Qt::WA_DeleteOnClose);而且无需手动释放
  • 【Python】QT(PySide2、PyQt5):列表视图、模型、自定义委托
  • 【芯片后端设计的灵魂:Placement的作用与重要性】
  • SQL 语句拼接在 C 语言中的实现与安全性分析
  • 跨语言统一语义真理及其对NLP深层分析影响
  • 2.3零基础玩转uni-app轮播图:从入门到精通 (咸虾米总结)
  • Python 实战:内网渗透中的信息收集自动化脚本(3)
  • 苹果公司即将启动一项为期三年的计划
  • Linux应急响应一般思路(三)
  • 蜗牛播放器 Android TV:解决大屏观影痛点的利器
  • C/C++ 指针与函数
  • Tesseract OCR之页面布局分析
  • 朴素贝叶斯:用 “概率思维” 解决分类问题的经典算法
  • ​Visual Studio + UE5 进行游戏开发的常见故障问题解决
  • 【区间DP】P1063 [NOIP 2006 提高组] 能量项链
  • 基于深度学习的人声分离系统设计与实现
  • Apache Commons Math_Java科学计算的利器
  • AP服务发现中两条重启检测路径
  • 南京魔数团:AR技术引领远程协作新纪元
  • C++ Core Guidelines 核心理念
  • ios webgl音频问题
  • 深入解析:为什么应该避免使用 atoi、atol 和 atof 函数
  • 集成算法概述与分类
  • 大数据毕业设计选题推荐-基于大数据的超市销售数据统计分析系统-Hadoop-Spark-数据可视化-BigData