当前位置:首页>python>Flask:Python 轻量级 Web 开发的「瑞士军刀」,小到个人博客大到商业应用都能搞定

Flask:Python 轻量级 Web 开发的「瑞士军刀」,小到个人博客大到商业应用都能搞定

  • 2026-03-26 09:14:46
Flask:Python 轻量级 Web 开发的「瑞士军刀」,小到个人博客大到商业应用都能搞定

如果你最近想学习 Web 开发,或者在寻找一款既能快速原型又能支撑生产环境的 Python 框架,那么你一定绕不开这个名字——Flask。

在 Python Web 开发的世界里,Flask 就像一把精致的瑞士军刀。它没有沉重的包袱,却提供了恰到好处的工具;它不强制你的开发方式,却在你需要时随时待命。从个人博客到创业公司后端,从机器学习模型部署到微服务架构,Flask 的身影无处不在。

今天,我们就来聊聊这个让无数开发者「始于简洁,陷于灵活」的 Web 框架。

一、Flask 是什么?为什么它如此特别?

Flask 诞生于 2010 年,由奥地利开发者 Armin Ronacher 创建。它的定位非常明确:微框架(Micro Framework)

这里的「微」不是指功能简陋,而是指核心精简。Flask 本身只提供了路由、请求处理、模板渲染等最基础的功能,其他如数据库操作、用户认证、缓存等功能都通过扩展(Extension)来实现。这种设计理念让它既保持了核心的简洁,又拥有了近乎无限的扩展能力。

与 Python 另一大 Web 框架 Django 相比,Flask 就像一辆轻便的自行车,而 Django 则是一辆全副武装的装甲车。如果你只是想从 A 点到 B 点,自行车显然更灵活;但如果你要穿越战场,装甲车可能更合适。

Flask 的核心特点:

  • 极简主义
    核心代码不到 3000 行,源码易读,适合学习
  • 高度灵活
    不强制项目结构,你可以按照自己的想法组织代码
  • 扩展丰富
    SQLAlchemy、Flask-Login、Flask-WTF 等扩展让功能扩展变得简单
  • 文档优秀
    官方文档被公认为技术文档的典范,示例详尽
  • 社区活跃
    GitHub 上超过 6 万星,Stack Overflow 上有大量讨论

二、从零开始:你的第一个 Flask 应用

让我们跳过冗长的理论,直接动手。安装 Flask 只需要一行命令:

pip install flask

然后创建一个 app.py 文件,写入以下代码:

from flask import Flaskapp = Flask(__name__)@app.route('/')def hello():    return 'Hello, Flask!'if __name__ == '__main__':    app.run(debug=True)

运行 python app.py,打开浏览器访问 http://127.0.0.1:5000,你就能看到那个熟悉的「Hello, Flask!」。整个过程不超过 5 分钟,这就是 Flask 的魅力——低门槛,高天花板

路由:URL 与函数的映射艺术

在上面的例子中,@app.route('/') 就是一个路由装饰器。它告诉 Flask:当用户访问根路径时,执行下面的 hello 函数。

Flask 的路由系统非常强大,支持动态参数:

@app.route('/user/<username>')def show_user(username):    return f'用户: {username}'@app.route('/post/<int:post_id>')def show_post(post_id):    return f'文章编号: {post_id}'

这里 <username> 会匹配字符串,<int:post_id> 则只匹配整数。这种简洁的语法让 RESTful API 的开发变得异常轻松。

请求与响应:Web 开发的本质

Web 开发的核心就是处理请求(Request)和返回响应(Response)。Flask 封装了这些底层细节,让你能专注于业务逻辑:

from flask import request, jsonify@app.route('/login', methods=['GET', 'POST'])def login():    if request.method == 'POST':        username = request.form['username']        password = request.form['password']        # 验证逻辑...        return jsonify({'status': 'success', 'message': '登录成功'})    return '''        <form method="post">            <input type="text" name="username" placeholder="用户名">            <input type="password" name="password" placeholder="密码">            <button type="submit">登录</button>        </form>    '''

在这个例子中,我们处理了一个登录接口。GET 请求返回表单,POST 请求处理提交的数据并返回 JSON 响应。request 对象包含了所有请求信息:表单数据、查询参数、文件上传、Headers 等。

三、模板引擎:让前端与后端优雅分离

单纯的字符串返回显然无法满足复杂的网页需求。Flask 内置了 Jinja2 模板引擎,这是 Python 世界中最强大的模板系统之一。

创建一个 templates/index.html

<!DOCTYPE html><html><head>    <title>{{ title }}</title></head><body>    <h1>{{ heading }}</h1>    <ul>    {% for item in items %}        <li>{{ item.name }} - ¥{{ item.price }}</li>    {% endfor %}    </ul></body></html>

然后在视图函数中渲染:

from flask import render_template@app.route('/shop')def shop():    products = [        {'name': '机械键盘', 'price': 299},        {'name': '无线鼠标', 'price': 199},        {'name': '4K 显示器', 'price': 2499}    ]    return render_template('index.html',                          title='我的商店',                          heading='热销商品',                          items=products)

Jinja2 的语法直观且强大:

  • {{ variable }}
     输出变量
  • {% control %}
     控制结构(if/for)
  • 支持模板继承(extends)、宏(macro)、过滤器(filter)

这种「模板继承」功能特别适合构建一致的网站布局。你可以定义一个基础模板 base.html,包含头部导航和底部页脚,然后让其他页面继承它,只替换中间的内容区域。

四、数据库集成:从 SQLite 到 PostgreSQL

Flask 本身不提供数据库功能,但 Flask-SQLAlchemy 扩展让它拥有了 ORM(对象关系映射)的能力。

from flask_sqlalchemy import SQLAlchemyapp.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'db = SQLAlchemy(app)class User(db.Model):    id = db.Column(db.Integer, primary_key=True)    username = db.Column(db.String(20), unique=True, nullable=False)    email = db.Column(db.String(120), unique=True, nullable=False)    def __repr__(self):        return f"User('{self.username}', '{self.email}')"

通过 SQLAlchemy,你可以用 Python 类来操作数据库表,无需手写 SQL:

# 创建用户new_user = User(username='张三', email='zhangsan@example.com')db.session.add(new_user)db.session.commit()# 查询用户user = User.query.filter_by(username='张三').first()users = User.query.all()# 更新user.email = 'newemail@example.com'db.session.commit()# 删除db.session.delete(user)db.session.commit()

对于生产环境,你可以轻松切换到 MySQL 或 PostgreSQL,只需修改配置字符串:

# PostgreSQLapp.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://user:password@localhost/dbname'# MySQLapp.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://user:password@localhost/dbname'

五、实战:搭建一个待办事项应用(Todo App)

理论说了这么多,让我们用 Flask 做一个完整的应用。这个例子将涵盖路由、模板、数据库和表单处理。

项目结构:

todo_app/├── app.py├── models.py├── forms.py├── templates/│   ├── base.html│   ├── index.html│   └── add_task.html└── static/    └── style.css

models.py(数据模型):

from flask_sqlalchemy import SQLAlchemyfrom datetime import datetimedb = SQLAlchemy()class Task(db.Model):    id = db.Column(db.Integer, primary_key=True)    title = db.Column(db.String(100), nullable=False)    description = db.Column(db.Text)    created_at = db.Column(db.DateTime, default=datetime.utcnow)    completed = db.Column(db.Boolean, default=False)    def __repr__(self):        return f'<Task {self.title}>'

forms.py(表单验证):

from flask_wtf import FlaskFormfrom wtforms import StringField, TextAreaField, SubmitFieldfrom wtforms.validators import DataRequiredclass TaskForm(FlaskForm):    title = StringField('标题', validators=[DataRequired()])    description = TextAreaField('描述')    submit = SubmitField('添加任务')

app.py(主应用):

from flask import Flask, render_template, redirect, url_for, flashfrom models import db, Taskfrom forms import TaskFormapp = Flask(__name__)app.config['SECRET_KEY'] = 'dev-secret-key'app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todo.db'db.init_app(app)@app.before_first_requestdef create_tables():    db.create_all()@app.route('/')def index():    tasks = Task.query.order_by(Task.created_at.desc()).all()    return render_template('index.html', tasks=tasks)@app.route('/add', methods=['GET', 'POST'])def add_task():    form = TaskForm()    if form.validate_on_submit():        task = Task(title=form.title.data, description=form.description.data)        db.session.add(task)        db.session.commit()        flash('任务添加成功!', 'success')        return redirect(url_for('index'))    return render_template('add_task.html', form=form)@app.route('/complete/<int:task_id>')def complete_task(task_id):    task = Task.query.get_or_404(task_id)    task.completed = not task.completed    db.session.commit()    return redirect(url_for('index'))@app.route('/delete/<int:task_id>')def delete_task(task_id):    task = Task.query.get_or_404(task_id)    db.session.delete(task)    db.session.commit()    flash('任务已删除', 'info')    return redirect(url_for('index'))if __name__ == '__main__':    app.run(debug=True)

templates/base.html(基础模板):

<!DOCTYPE html><html lang="zh-CN"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>{% block title %}Todo App{% endblock %}</title>    <style>        body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; }        .task { border: 1px solid #ddd; padding: 15px; margin: 10px 0; border-radius: 8px; }        .completed { text-decoration: line-through; color: #888; }        .btn { padding: 8px 16px; text-decoration: none; display: inline-block; margin: 5px; border-radius: 4px; }        .btn-primary { background: #007bff; color: white; }        .btn-success { background: #28a745; color: white; }        .btn-danger { background: #dc3545; color: white; }    </style></head><body>    {% with messages = get_flashed_messages(with_categories=true) %}        {% if messages %}            {% for category, message in messages %}                <div class="alert alert-{{ category }}">{{ message }}</div>            {% endfor %}        {% endif %}    {% endwith %}    {% block content %}{% endblock %}</body></html>

templates/index.html(任务列表):

{% extends "base.html" %}{% block content %}<h1>我的待办事项</h1><a href="{{ url_for('add_task') }}" class="btn btn-primary">+ 新建任务</a>{% for task in tasks %}<div class="task {% if task.completed %}completed{% endif %}">    <h3>{{ task.title }}</h3>    <p>{{ task.description }}</p>    <small>创建于: {{ task.created_at.strftime('%Y-%m-%d %H:%M') }}</small>    <br>    <a href="{{ url_for('complete_task', task_id=task.id) }}" class="btn btn-success">        {% if task.completed %}取消完成{% else %}标记完成{% endif %}    </a>    <a href="{{ url_for('delete_task', task_id=task.id) }}" class="btn btn-danger" onclick="return confirm('确定删除吗?')">删除</a></div>{% else %}<p>暂无任务,快去添加一个吧!</p>{% endfor %}{% endblock %}

这个虽然简单但功能完整的应用展示了 Flask 的典型工作流:模型定义数据结构,表单处理用户输入,视图函数协调逻辑,模板负责展示。整个代码不到 100 行,却包含了增删改查(CRUD)的所有操作。

六、超越基础:Flask 的高级玩法

当你掌握了基础,Flask 还能带你走得更远。

蓝图(Blueprint):构建大型应用

随着项目增长,把所有路由放在一个文件里显然不现实。Flask 的蓝图机制允许你模块化组织代码:

# auth.pyfrom flask import Blueprint, render_templateauth = Blueprint('auth', __name__)@auth.route('/login')def login():    return render_template('auth/login.html')# app.pyfrom auth import authapp.register_blueprint(auth, url_prefix='/auth')

这样你可以将用户认证、博客文章、API 接口分别放在不同的蓝图中,保持代码整洁。

RESTful API 开发

在移动互联网时代,前后端分离已成为主流。Flask 配合 Flask-RESTful 或 Flask-RESTX 可以快速构建 API:

from flask_restful import Resource, Apiapi = Api(app)class TaskAPI(Resource):    def get(self, task_id):        task = Task.query.get_or_404(task_id)        return {'id': task.id, 'title': task.title, 'completed': task.completed}    def put(self, task_id):        # 更新逻辑        pass    def delete(self, task_id):        # 删除逻辑        passapi.add_resource(TaskAPI, '/api/tasks/<int:task_id>')

配合 JWT(JSON Web Token)认证,你就能为移动端或 Vue/React 前端提供数据接口。

部署上线:让全世界看到你的作品

开发完成后,如何让应用在线上运行?Flask 内置的服务器只适合开发,生产环境需要使用 Gunicorn 或 uWSGI:

pip install gunicorngunicorn -w 4 -b 0.0.0.0:8000 app:app

配合 Nginx 反向代理,你可以轻松应对高并发。如果你不想折腾服务器,Heroku、PythonAnywhere、或者国内的阿里云、腾讯云都提供一键部署 Flask 应用的服务。

Docker 化也是现代部署的标配:

FROM python:3.9-slimWORKDIR /appCOPY requirements.txt .RUN pip install -r requirements.txtCOPY . .CMD ["gunicorn", "-b", "0.0.0.0:8000", "app:app"]

七、Flask 生态系统:你需要的它都有

Flask 之所以强大,不仅在于核心,更在于其丰富的扩展生态:

  • Flask-Login
    用户会话管理,处理登录状态
  • Flask-WTF
    表单处理和 CSRF 保护
  • Flask-Mail
    发送邮件
  • Flask-Caching
    缓存支持(Redis/Memcached)
  • Flask-Admin
    快速构建管理后台
  • Flask-Migrate
    数据库迁移(基于 Alembic)
  • Celery
    异步任务队列,处理耗时操作

比如添加用户认证只需要几行代码:

from flask_login import LoginManager, UserMixin, login_requiredlogin_manager = LoginManager(app)@login_manager.user_loaderdef load_user(user_id):    return User.query.get(int(user_id))@app.route('/dashboard')@login_requireddef dashboard():    return '这是受保护的页面'

八、学习路径建议:从入门到精通

如果你是 Flask 新手,建议按以下路径学习:

第一阶段:基础(1-2 周)

  1. 理解 HTTP 协议基础(请求方法、状态码)
  2. 掌握路由、视图函数、模板基础语法
  3. 学会使用表单处理用户输入
  4. 完成一个简单的静态网站

第二阶段:数据库与模型(2-3 周)

  1. 学习 SQLAlchemy 基础
  2. 掌握数据库关系(一对多、多对多)
  3. 学习数据库迁移(Flask-Migrate)
  4. 做一个包含用户系统的博客或商城

第三阶段:进阶与部署(2 周)

  1. 学习蓝图组织大型项目
  2. 掌握 RESTful API 设计
  3. 学习缓存、异步任务优化性能
  4. 掌握 Linux 部署和 Docker 容器化

推荐资源:

  • 官方文档(The Flask Mega-Tutorial):米格尔·格林贝格的教程被公认为最佳入门材料
  • GitHub 上的优秀开源项目:如 FlaskBB、Redash,阅读源码能快速提升
  • 实践项目:尝试重构你之前用其他语言或框架写过的项目

九、结语:小而美的哲学

在这个追求「大而全」的时代,Flask 坚持「小而美」的哲学显得尤为珍贵。它不会告诉你应该怎么做,而是提供可能性,让你决定最适合自己的方式。

无论你是想快速验证一个创业想法,还是搭建一个机器学习模型的演示界面,亦或是构建一个高并发的微服务,Flask 都能胜任。它的学习曲线平缓,但深度无限,这正是它能在发布十余年后依然保持活力的原因。

如果你还没尝试过 Flask,不妨今天就安装它,写下一个「Hello, World」。谁知道呢,也许这就是你下一个伟大项目的起点。

毕竟,每一个庞大的应用,最初都始于那一行简单的代码。


延伸阅读:

  • Flask 官方文档
  • Flask Mega-Tutorial
  • Awesome Flask:精选的 Flask 资源列表

本文示例代码已在 Python 3.9 + Flask 2.3 环境下测试通过。如有问题,欢迎在评论区留言交流。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 11:41:43 HTTP/2.0 GET : https://f.mffb.com.cn/a/482518.html
  2. 运行时间 : 0.295839s [ 吞吐率:3.38req/s ] 内存消耗:4,897.67kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=4ba30166a61263161a8013969c9cce9f
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000908s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001507s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000827s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000898s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001584s ]
  6. SELECT * FROM `set` [ RunTime:0.000692s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001519s ]
  8. SELECT * FROM `article` WHERE `id` = 482518 LIMIT 1 [ RunTime:0.006096s ]
  9. UPDATE `article` SET `lasttime` = 1774582903 WHERE `id` = 482518 [ RunTime:0.002422s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000728s ]
  11. SELECT * FROM `article` WHERE `id` < 482518 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001805s ]
  12. SELECT * FROM `article` WHERE `id` > 482518 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002027s ]
  13. SELECT * FROM `article` WHERE `id` < 482518 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.025587s ]
  14. SELECT * FROM `article` WHERE `id` < 482518 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.026554s ]
  15. SELECT * FROM `article` WHERE `id` < 482518 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.033582s ]
0.299674s