乐于分享
好东西不私藏

用这套Python项目结构模板,代码交接再也不用口头解释

用这套Python项目结构模板,代码交接再也不用口头解释

设想如下场景:同事离职,走之前把他负责的项目交接给了我。

说是交接,其实就是在工位上指着屏幕跟我讲了40分钟:这个config是配置,那个utils是工具函数,scripts下面有几个脚本但其中两个没用了别管它,tests……嗯测试我后来没怎么写……

我当时就想,如果项目结构本身就能说话,何必费这口舌?

后来我接手第二个、第三个项目,发现每个项目目录长得都不一样。有的把所有代码扔一个文件夹,有的层层嵌套七八层,有的README写了一堆但关键信息一个没有。每次接手新项目,都得靠前任口头翻译

痛定思痛,我整理了一套Python项目结构模板,自己用了大半年,团队里推了一阵子。不敢说是最佳实践,但至少交接的时候不用再口头解释了——打开项目,目录结构就是文档。

往期阅读>>>

Python 为什么会成为AI时代的头部语言

Python 40个常用的列表推导式

Python 50个提高代码开发效率的方法

Python 自动检测服务HTTPS证书过期时间并发送预警

Python 自动化操作Redis的15个实用脚本

Python 自动化管理Jenkins的15个实用脚本,提升效率

Python copyparty搭建轻量的文件服务器的方法

Python 实现2FA认证的方法,提升安全性

Python 封装20个常用API接口,提升开发效率

App2Docker:如何无需编写Dockerfile也可以创建容器镜像

Python 集成 Nacos 配置中心的方法

Python 35个JSON数据处理方法

Python 字典与列表的20个核心技巧

Python 15个文本分析的库,提升效率

Python 15个Pandas技巧,提升数据分析效率

Python 运维中30个常用的库,提升效率

Python调用远程接口的方法

Python 提取HTML文本的方法,提升效率

Python 应用容器化方法:实现“一次部署,处处运行”

Python 自动化识别Nginx配置并导出为excel文件,提升Nginx管理效率

Python 5个常见的异步任务处理框架

Python数据科学常见的30个库

Python 50个实用代码片段,优雅高效


先看全貌

my-project/├── README.md              # 项目入口,必读├── pyproject.toml         # 依赖管理 + 构建配置├── Makefile               # 常用命令快捷入口├── .env.example           # 环境变量模板├── .gitignore├── .github/│   └── workflows/│       └── ci.yml         # CI配置├── docs/│   └── architecture.md    # 架构设计文档├── scripts/│   ├── setup.sh           # 一键初始化│   └── seed_data.py       # 测试数据填充├── tests/│   ├── conftest.py        # 公共fixture│   ├── unit/│   │   └── test_service.py│   └── integration/│       └── test_api.py├── src/│   └── my_project/│       ├── __init__.py│       ├── __main__.py    # python -m my_project 入口│       ├── config.py      # 配置加载│       ├── models/        # 数据模型│       ├── services/      # 业务逻辑│       ├── api/           # 对外接口│       └── utils/         # 工具函数└── docker/    ├── Dockerfile    └── docker-compose.yml

别急着说太复杂了。我一个个讲,你看看这些文件是不是都有必要。


为什么用 src/ 布局?

这个可能是争议最大的点。很多人习惯了这样:

my-project/├── my_project/│   ├── __init__.py│   └── ...├── tests/└── pyproject.toml

项目根目录直接放包,看起来简单。但有个坑:你本地开发的时候,Python会从项目根目录找模块,这意味着你跑的是源码而不是安装后的包。本地跑得好好的,一打包发布就挂——因为安装路径、依赖关系可能都不一样。

把包放在 src/ 下面:

src/└── my_project/    ├── __init__.py    └── ...

必须先 pip install -e . 安装才能用,本地开发环境和真实安装环境保持一致。这个做法Python官方文档和PyPA都推荐,叫 src layout

一开始我也觉得多一层目录麻烦,但踩过一次本地能跑装不上的坑之后,就再也没回过头。


pyproject.toml 而不是 requirements.txt

以前项目里总有这些东西:

requirements.txtrequirements-dev.txtsetup.pysetup.cfgMANIFEST.in

哪个是干啥的?新来的人一脸懵。

pyproject.toml 一个文件搞定,PEP 518/621标准,Python社区已经定了:

[project]name = "my-project"version = "0.1.0"description = "项目描述"requires-python = ">=3.10"dependencies = ["fastapi>=0.100.0","sqlalchemy>=2.0","pydantic>=2.0",][project.optional-dependencies]dev = ["pytest>=7.0","pytest-cov","ruff","mypy",][project.scripts]my-project = "my_project.__main__:main"

依赖、元数据、入口点,全在这一个文件里。不需要再维护 setup.py 和 requirements.txt 两套东西。

开发环境安装:

pip install -e".[dev]"

一行搞定,开发和运行依赖都装上。


Makefile — 团队新人的救命稻草

新同事入职第一天, clone完代码问你:怎么跑?怎么测?怎么格式化?

以前我得口头说:先装依赖,然后跑pytest,flake8检查代码风格……现在我只说一句:make

.PHONY: install test lint format run cleaninstall:pip install -e ".[dev]"test:pytest tests/ -v --cov=my_projectlint:ruff check src/ tests/mypy src/format:ruff format src/ tests/run:python -m my_projectclean:rm -rf build/ dist/ *.egg-info .pytest_cache .mypy_cachefind . -type d -name __pycache__ -exec rm -rf {} +

make test 跑测试,make lint 检查代码,make run 启动项目。不用记命令,不用翻文档,make 一下就能看到所有可用命令。

Makefile的本质很简单:把团队约定变成可执行文件,而不是口头约定。


config.py — 别再把配置散落在各处

你有没有见过这种代码?

# service.pyDB_HOST = "192.168.1.100"# 硬编码API_KEY = "sk-xxxxx"# 直接写源码里TIMEOUT = int(os.environ.get("TIMEOUT""30"))  # 到处都是环境变量读取

配置散落在十几个文件里,改一个数据库地址要翻遍整个项目。更别提密钥直接写在代码里这种操作——我见过不止一次推到Git上去了。

用一个统一的配置模块:

# src/my_project/config.pyfrompydantic_settingsimportBaseSettingsfromfunctoolsimportlru_cacheclassSettings(BaseSettings):# 应用配置app_namestr = "my-project"debugbool = False# 数据库db_hoststr = "localhost"db_portint = 5432db_namestr = "mydb"db_userstr = ""db_passwordstr = ""# 外部服务api_keystr = ""api_timeoutint = 30model_config = {"env_file"".env"}@lru_cachedefget_settings() ->Settings:returnSettings()

所有配置集中管理,类型有校验,默认值有文档,环境变量自动读取。哪里需要配置就 from my_project.config import get_settings,不用到处 os.environ.get

.env.example 是给新人看的模板:

# .env.example — 复制为 .env 后填写实际值DB_HOST=localhostDB_PORT=5432DB_NAME=mydbDB_USER=your_userDB_PASSWORD=your_passwordAPI_KEY=your_api_keyAPI_TIMEOUT=30

新人clone完项目,复制 .env.example 为 .env,填上自己的配置,就能跑起来。不用再问你数据库地址是什么API密钥找谁要


models/services/api/ — 分层不是装腔作势

很多人写Python喜欢把所有逻辑塞一个文件,甚至一个函数从头写到尾。几百行的函数,数据库查询、业务判断、响应格式化全搅在一起。改一处怕牵连其他,最后谁都不敢动。

拆成三层:

src/my_project/├── models/          # 数据长什么样│   ├── __init__.py│   ├── user.py      # 用户模型│   └── order.py     # 订单模型├── services/        # 业务怎么干│   ├── __init__.py│   ├── user_service.py│   └── order_service.py├── api/             # 外部怎么调│   ├── __init__.py│   └── routes.py

各层干的事不一样:

  • models/:纯数据定义,不管业务逻辑。用SQLAlchemy定义ORM,用Pydantic定义Schema,别混着来。

  • services/:核心业务逻辑。查数据库、调外部接口、做计算,都在这里。这是项目最核心的部分,也应该是最好测试的部分——因为不依赖HTTP框架,mock起来方便。

  • api/:HTTP接口层。只负责接请求、调service、返响应。业务逻辑一行都别写。

举个具体的例子:

# models/user.py — 数据模型fromsqlalchemyimportColumnStringBooleanfrommy_project.models.baseimportBaseclassUser(Base):__tablename__ = "users"id = Column(Stringprimary_key=True)name = Column(String)email = Column(Stringunique=True)is_active = Column(Booleandefault=True)
# services/user_service.py — 业务逻辑frommy_project.models.userimportUserfrommy_project.configimportget_settingsclassUserService:def__init__(selfdb_session):self.db = db_sessiondefget_user(selfuser_idstr->User|None:returnself.db.query(User).filter_by(id=user_id).first()defdeactivate_user(selfuser_idstr->bool:user = self.get_user(user_id)ifnotuser:returnFalseuser.is_active = Falseself.db.commit()returnTrue
# api/routes.py — 接口层fromfastapiimportAPIRouterDependsfrommy_project.services.user_serviceimportUserServicerouter = APIRouter()@router.get("/users/{user_id}")defget_user(user_idstrserviceUserService = Depends()):user = service.get_user(user_id)ifnotuser:return {"status""not_found"}return {"id"user.id"name"user.name}

这样分层的好处:改接口不影响业务逻辑,换数据库不影响接口,写单元测试可以绕过HTTP直接测service。每一层只关心自己的事,改动的范围才可控。


__main__.py — 统一入口

之前见过各种启动方式:有人 python app.py,有人 python run.py,有人 python -m some.module.that.is.deep.nested。每个项目不一样,每次都得问。

用 __main__.py

# src/my_project/__main__.pyfrommy_project.configimportget_settingsfrommy_project.apiimportcreate_appdefmain():settings = get_settings()app = create_app(settings)app.run(host="0.0.0.0"port=8000)if__name__ == "__main__":main()

启动方式统一:

python -m my_project

不用记入口文件叫啥,不用翻README找启动命令。python -m 包名,就这一种。


tests/ — 分清单元测试和集成测试

很多项目的 tests/ 目录就是一个大杂烩,单元测试和集成测试混在一起。跑起来有的快有的慢,只想跑快的还得分着挑。

分开来:

tests/├── conftest.py          # 公共fixture├── unit/                # 不依赖外部,秒级完成│   └── test_user_service.py└── integration/         # 需要数据库/外部服务    └── test_api.py
# tests/conftest.pyimportpytestfrommy_project.services.user_serviceimportUserService@pytest.fixturedefuser_service():"""单元测试用的mock service"""returnUserService(db_session=MockSession())

日常开发跑单元测试,速度快:

pytest tests/unit/ -v

CI或者上线前跑全量:

pytest tests/ -v

这比一锅炖的体验好太多了。


scripts/ — 那些只跑一次的脚本也得有个家

每个项目总有几个偶尔用一下的脚本:初始化数据库、填充测试数据、迁移旧数据、清理临时文件。以前这些脚本要么散落在项目根目录,要么在某个人的电脑上,要么压根找不到。

给它们一个固定位置:

scripts/├── setup.sh          # 一键初始化开发环境└── seed_data.py      # 填充测试数据

setup.sh 是新人入职的第一条命令:

#!/bin/bashset-eecho">>> 创建虚拟环境"python -m venv .venvsource .venv/bin/activateecho">>> 安装依赖"pip install -e".[dev]"echo">>> 配置环境变量"cp .env.example .envecho">>> 初始化数据库"python -m my_project.db initecho">>> 完成!运行 make run 启动项目"

这样不管谁来,clone完跑一个 bash scripts/setup.sh 就能开始干活。


docs/ — 不是让你写长篇大论

很多项目要么没文档,要么文档是过时的。问题出在文档这个词太吓人了,好像得写个几十页的规范似的。

我 docs/ 里就放一个文件:architecture.md

内容不超过一页,写三件事就够了:

  1. 这个项目是干啥的(一两句话)

  2. 目录结构每个部分是干啥的(就是上面那些解释)

  3. 关键决策和原因(比如为什么选FastAPI不选Flask,为什么用src布局)

# 项目架构## 简介内部订单管理系统,提供REST API给前端调用。## 目录说明`src/my_project/models/` — 数据模型(ORM + Schema)`src/my_project/services/` — 业务逻辑`src/my_project/api/` — HTTP接口`tests/unit/` — 单元测试(不需要数据库)`tests/integration/` — 集成测试(需要数据库)## 关键决策使用FastAPI:需要异步支持 + 自动生成API文档src布局:避免本地开发和安装环境不一致Pydantic Settings:统一配置管理,类型安全

够用了。以后有人问这个项目为什么这样组织,指这个文件就行。


最后说个事

其实项目结构这件事,最怕的不是不知道怎么组织,而是每个人都按自己的习惯来

模板的意义从来不是这个结构最牛,而是大家用同一套。当所有项目长得差不多,你打开任何一个都能在10秒内找到想要的东西,这才是效率。

代码能自己说话,就不用人替它解释。

“无他,惟手熟尔”!有需要的用起来!
------加入知识库与更多人一起学习------

https://ima.qq.com/wiki/?shareId=f2628818f0874da17b71ffa0e5e8408114e7dbad46f1745bbd1cc1365277631c

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