- 博客(1334)
- 收藏
- 关注
原创 构建健壮的数据库连接池:高并发 Web 应用的制胜之匙
本文深入探讨了数据库连接池在高并发Web应用中的重要性及实现方案。文章首先分析了连接池的必要性:减少连接开销、缓解并发压力、提升性能与可用性。接着详细介绍了连接池设计的6大核心要素,包括连接数控制、超时机制和健康检测等。随后提供了Python中三种主流实现方式:SQLAlchemy内置池、Psycopg2原生池和异步aiopg/aiomysql池,并附有代码示例。文章还展示了如何构建自定义线程安全连接池,强调异常处理和资源回收。最后探讨了高级特性如主从分离、动态扩缩容等。
2025-08-08 09:06:31
535
原创 构建安全 Web 应用:从用户认证与授权到 JWT 原理解析
本文深入探讨了Web应用安全中的用户认证与授权机制,重点解析了JWT(JSON Web Token)的工作原理及实现方式。文章首先区分了认证(Authentication)与授权(Authorization)的差异,随后对比了传统Session与JWT的特性,指出JWT在无状态、跨域支持和性能方面的优势。详细剖析了JWT的三部分结构(Header、Payload、Signature)及其验证流程。
2025-08-08 07:55:06
816
原创 深度剖析中间件:理解原理与实战示例(以 Django 与 Flask 为例)
文章摘要:中间件原理与实战(Django/Flask) 中间件是现代Web开发中处理横切关注点的关键组件,位于请求与业务逻辑之间,实现统一拦截和处理。本文系统介绍了中间件的核心概念、设计原则和具体实现。 主要内容包括: 中间件的定义与职责:预处理请求、后处理响应、异常捕获和性能监控 Django中间件机制:生命周期、核心接口方法和自定义实现(日志记录、异常处理) Flask的实现方式:钩子函数和WSGI中间件,提供底层拦截能力 通过具体代码示例(如Django的请求耗时统计、统一异常处理,Flask的WSG
2025-08-08 07:43:14
455
原创 深度解读 RESTful API 设计:原则、实践与 Python 库选择
本文深入解析了RESTful API的设计原则与实践,包括资源导向、统一接口、无状态等核心概念,并详细介绍了HTTP方法、状态码、URI设计规范等最佳实践。文章还探讨了错误处理、版本控制、安全鉴权等关键环节,并提供了性能优化思路。最后对比了Python中构建RESTful API的主流库(DRF、FastAPI等),从特性、性能、学习曲线等维度给出选型建议,帮助开发者根据项目需求做出合理选择。
2025-08-08 07:39:20
635
原创 破解 Django N+1 查询困境:使用 select_related 与 prefetch_related 实践指南
Django N+1 查询优化指南:select_related与prefetch_related实战 本文深入解析Django ORM中的N+1查询问题及优化方案。N+1查询指获取主记录后,每条记录再发起子查询,导致性能瓶颈。文章通过博客系统案例,演示了两种优化方法: select_related:通过SQL JOIN一次性加载外键/一对一关联数据,将N+1次查询合并为1次。适用于多对一关系,如文章与作者。
2025-08-08 07:25:41
3
原创 驾驭数据库迁移:在 Django 与 Flask 中的全流程实战指南
数据库迁移实战指南:Django与Flask解决方案 本文系统介绍了数据库迁移在Django和Flask框架中的实现方法。从基本原理出发,详细讲解了Django内置迁移工具的使用流程,包括生成迁移脚本、执行迁移、回滚等核心操作,并演示了自定义迁移脚本的编写方法。对于Flask框架,重点介绍了通过Flask-Migrate和Alembic实现数据库迁移的完整流程,包括环境配置、迁移生成与应用、版本管理等关键环节。
2025-08-08 07:10:51
3
原创 《深入浅出 Django ORM:设计理念与惰性查询实现详解》
本文深入解析了Django ORM的设计理念与惰性查询机制。Django ORM通过将数据库表映射为Python类,实现了面向对象的数据库操作,支持多种数据库且提供高效查询接口。重点探讨了惰性查询的工作原理——QuerySet对象延迟执行SQL直到真正需要数据时才会访问数据库,有效减少不必要查询。文章还介绍了性能优化技巧,包括select_related/prefetch_related解决关联查询问题、缓存QuerySet以及使用only/defer控制字段加载。
2025-08-07 15:17:13
372
原创 《Django vs Flask: 探索设计哲学与场景适用性,为你的项目选择正确框架》
Django与Flask是Python两大主流Web框架,各具特色。Django以"电池全备"著称,提供完整工具链,适合快速开发复杂应用;Flask则以轻量化、灵活性见长,适合小型项目或微服务。本文从设计哲学、适用场景、代码示例等维度对比分析:Django适合企业级应用开发,内置ORM和管理后台;Flask则更适用于API服务和自定义架构。选择时需考虑项目规模、团队经验等因素,小型项目可选Flask,而复杂系统更适合Django。两者各有优势,关键是根据需求合理选择。
2025-08-07 15:06:24
279
原创 探究 ASGI 的技术优势:现代 Web 开发的新方向
ASGI(异步服务器网关接口)是Python Web开发的新标准,相比传统的WSGI,它支持异步编程、多协议(HTTP/WebSocket/HTTP2)和更高并发,适用于实时应用和微服务架构。本文详细介绍了ASGI的技术优势,包括异步任务处理、WebSocket支持以及灵活的可扩展性,并通过FastAPI和Uvicorn的代码示例展示了如何构建高性能实时应用。ASGI为现代Web开发提供了更高效、更灵活的解决方案,是未来技术发展的重要方向。
2025-08-07 12:14:36
240
原创 《深入理解 WSGI:解锁 Python Web 应用背后的奥秘》
本文深入解析了Python Web开发中的关键组件WSGI(Web服务器网关接口),揭示了其作为服务器与框架间标准化桥梁的核心作用。文章首先阐述了WSGI的定义和设计初衷,通过代码示例展示其基本实现;接着分析了WSGI解决的问题,包括服务器-框架兼容性和生态协作等痛点;然后详细拆解了WSGI的核心组件(environ、start_response和返回值)及其工作机制;最后给出了实际应用场景、最佳实践和发展趋势。文章指出,尽管异步接口ASGI兴起,WSGI仍是Python Web生态的重要基石,帮助开发者构
2025-08-07 10:34:05
129
原创 《精简内存,从容应对:Python 优化指南》
本文介绍了三种优化Python程序内存占用的有效方法:1)使用生成器替代列表处理大数据,避免一次性加载;2)合理控制变量作用域,减少无用数据持久化;3)选用高效数据结构如array模块。文章通过代码示例展示了每种技术的实现方式,并建议结合NumPy等工具进一步优化。最后提出高级进阶方向,包括协程应用和序列化优化,并鼓励读者分享实际开发中的内存管理经验。这些技巧能帮助开发者编写更高效的Python代码,特别适用于处理大规模数据的场景。
2025-08-07 10:26:22
78
原创 高效资源管理:深入理解 Python 对象池的原理与应用场景
Python 对象池是一种优化资源管理的设计模式,通过复用已分配对象来提升性能,减少创建和销毁开销。适用于高频对象创建(如数据库连接)、性能敏感场景(如游戏开发)和资源受限环境。实现时需考虑线程安全和上下文管理,优势包括性能提升和资源复用,但也需权衡内存占用和管理复杂性。典型应用包括数据库连接池和线程池,现代Python中还可结合异步编程优化高并发场景。对象池是资源密集型任务中的高效工具,但需根据实际需求评估适用性。
2025-08-06 05:38:53
254
原创 NumPy 加速揭秘:内存布局与向量化操作让它快如闪电
NumPy性能远超Python列表的关键在于优化的内存布局和向量化操作。其连续存储结构(C数组)提升内存效率,避免Python列表的指针开销。向量化计算利用底层C实现,一次处理多数据,大幅减少循环耗时。在高维数据处理中,NumPy原生支持矩阵运算,而Python需手动实现。实际测试显示,相同计算任务NumPy耗时仅为Python列表的1/10到1/100。建议数值计算优先选用NumPy,培养向量化思维,并与其他科学计算工具结合使用。随着发展,NumPy正整合GPU加速等新技术以应对更大规模数据挑战。
2025-08-06 05:33:44
12
原创 打造高效编译:深入理解 JIT 原理及 PyPy 的性能优势
摘要: PyPy 作为 Python 的高性能替代实现,其核心优势在于 JIT(即时)编译技术,动态编译热点代码以提升运行效率。相比 CPython,PyPy 通过 热点追踪、动态类型优化和高效垃圾回收,显著加速计算密集型任务(如矩阵运算)。JIT 兼具解释器的灵活性和编译器的速度,但存在启动延迟和场景局限性。未来,JIT 或将在类型推断和异构计算方向突破。开发者可通过识别热点代码和性能监测,充分利用 PyPy 的优化潜力。
2025-08-06 05:30:05
15
原创 揭秘 Cython:Python 性能优化的秘密武器
本文介绍了Cython作为Python性能优化的秘密武器,它能将Python代码编译为高效的C代码,显著提升计算密集型任务的速度。文章详细解析了Cython的工作原理、适用场景(如数值计算、循环优化和扩展开发)及实用技巧(类型声明、内存管理等),并通过性能测试展示了其相比原生Python的显著优势(10倍加速)。作者还提供了最佳实践建议,帮助开发者在保持代码可读性的同时实现性能优化。最后鼓励读者分享实际开发中的性能挑战,共同探讨Cython的解决方案。
2025-08-05 06:55:45
551
原创 `weakref` 模块在 Python 中的实用指南:解密循环引用与对象缓存的高效管理
本文介绍了 Python 中 weakref 模块的实用技巧,重点解析了如何用它解决循环引用和高效管理对象缓存。通过具体代码示例展示了弱引用的工作原理,包括避免内存泄漏的循环引用处理方案,以及利用 WeakValueDictionary 实现智能缓存管理的方法。文章还提供了 weakref 的核心工具说明和动态对象池案例,最后总结了使用注意事项,帮助开发者提升 Python 内存管理效率。
2025-08-05 06:39:26
144
原创 探秘“写时复制”机制:如何在 Python 的 `fork()` 调用中发挥作用?
本文探讨了写时复制(Copy-on-Write)机制及其在Python的fork()调用中的应用。该技术通过延迟内存复制,仅在数据被修改时才创建副本,从而优化资源使用和性能表现。文章详细介绍了写时复制的工作原理,并通过代码示例展示了它在Python多进程编程中的实际应用,包括内存共享、数据隔离和性能优化的效果。最后提出了该技术在多进程开发中的适用场景和注意事项,帮助开发者更好地理解和运用这一关键技术。
2025-08-05 06:36:12
15
原创 深入解析 Python 中字符串拼接性能:`+`、`join` 和 f-string 的效率之争
本文对比了 Python 中三种字符串拼接方法(+运算符、join方法和 f-string)的性能差异。测试表明,join方法在大批量拼接时性能最优,仅需一次内存分配;+运算符因频繁创建新对象性能最差;f-string在可读性和功能性上占优,性能介于二者之间。文章建议:少量拼接用+,大批量用join,动态内容使用f-string,并避免在循环中使用+运算符。
2025-08-05 06:33:32
8
原创 《全面解析 Python 性能分析工具:从 CPU 到内存优化的实战指南》
本文详细介绍了 Python 性能分析的核心工具(cProfile、memory-profiler、py-spy),帮助开发者定位 CPU 和内存瓶颈。通过实战案例演示了如何优化数据处理和内存管理代码,并提供了性能优化的最佳实践流程。文章强调工具组合使用的重要性,建议开发者定期分析代码性能,同时避免过早优化。这些工具能有效提升 Python 程序的运行效率,适合需要处理高性能需求的开发者参考。
2025-08-04 07:09:08
256
原创 《Python 程序运行缓慢怎么办?深入性能分析与优化实战指南》
本文介绍了如何分析和优化Python程序性能。首先指出了常见性能瓶颈,包括算法复杂度、I/O操作、内存问题和GIL限制。接着详细讲解了性能分析工具,如time模块、cProfile、line_profiler和memory_profiler等。在优化策略部分,提供了算法优化、异步编程、内存管理、缓存利用、C扩展和多进程并行化等实用方法。最后通过日志处理案例展示了优化前后的明显差异。文章强调性能优化应建立在准确分析基础上,并兼顾代码可维护性,为开发者提供了一套完整的性能优化实践指南。
2025-08-04 07:05:59
12
原创 《深入解析 Python 数据结构:namedtuple 与 dataclass 的优缺点对比》
本文对比了 Python 中两种常用的数据结构工具:namedtuple 和 dataclass。namedtuple 轻量高效,适合不可变的简单数据结构,但不支持复杂逻辑;dataclass 功能丰富,支持类型注解、默认值和自定义方法,更适合复杂场景。文章通过代码示例和特性对比,帮助开发者根据需求选择合适工具,并推荐了最佳实践,如使用 frozen=True 确保数据安全。最后指出,未来可能出现更强大的数据结构工具以满足多样化需求。
2025-08-04 07:03:45
26
原创 《Python 类型提示的力量:从代码健壮性到开发效率的全面解析》
摘要: Python 类型提示(Type Hinting)在保留动态特性的同时,通过静态类型声明显著提升代码健壮性。主要优势包括增强可读性、支持IDE静态检查(如mypy)、优化调试维护效率,并为第三方库提供更好的工具支持。常见用法涵盖基础/复合类型(通过typing模块)、动态约束(Union/Any),适用于数据模型、异步编程等场景。需注意类型提示不改变运行时行为,建议结合检查工具渐进式应用。尽管可能增加复杂度,但其对大型项目的价值已推动Python类型系统持续演进(如PEP 646)。
2025-08-03 07:39:05
104
原创 探秘 Python 3.8 的海象运算符 `:=`:赋值表达式的用途与场景
Python 3.8引入的海象运算符:=(赋值表达式)允许在表达式内部进行变量赋值,提高了代码简洁性和可读性。本文介绍了该运算符的特性,通过示例展示了其在简化循环逻辑、条件判断和资源管理等场景的应用。海象运算符能减少冗余代码,使数据处理更高效,但需注意避免滥用导致代码可维护性下降。合理使用这一特性可以优化Python开发体验。
2025-08-03 07:35:23
130
原创 《探秘 Python 的 `itertools` 模块:高效处理大型数据集的哲学与实践》
本文深入探讨了 Python itertools 模块在高效处理大型数据集中的应用。该模块通过惰性计算、函数式编程思想和工具可组合性三大核心理念,实现了内存优化和性能提升。文章详细介绍了其三类核心工具(无限迭代器、终止于短输入的迭代器及组合生成器),并通过数据生成、流式处理、分块操作和排列组合等实战案例展示其强大功能。最后提出了延迟计算权衡、内存管理和代码可读性等最佳实践建议,为开发者提供了处理大规模数据的有效解决方案。
2025-08-03 06:32:32
25
原创 《深入解析 Python 的 `*args` 和 `**kwargs`:从基础使用到高级应用》
本文深入解析了Python中*args和**kwargs的使用方法,从基础概念到高级应用。*args用于接收任意数量的位置参数,**kwargs则处理关键字参数,并遵循特定参数顺序规则。文章展示了其在函数解包、装饰器和内置函数中的高级用法,同时提出了参数命名清晰、避免滥用等最佳实践,并警示了参数顺序错误等常见陷阱。这些特性使Python函数更灵活高效,适用于各种开发场景。
2025-08-03 06:30:25
18
原创 解锁 Python 柯里化:从概念到实践的全面解析
本文全面解析 Python 中的柯里化技术,介绍其概念、优势及实现方法。柯里化通过将多参数函数转换为单参数函数序列,提升代码复用性和可读性。文章演示了手动实现、使用functools.partial以及递归实现等不同方法,并举例说明在API配置、数据处理等场景的应用。同时指出柯里化可能带来的性能问题和使用限制。最后探讨柯里化在函数式编程中的价值,鼓励读者在实践中灵活运用这一技术。
2025-08-02 07:37:03
16
原创 深入探索 Python 的 `functools`:高效开发的幕后英雄
Python的functools模块提供了提升开发效率的实用工具,主要讲解partial和wraps两大功能: partial用于固定函数部分参数,简化调用,适用于重复参数或预定义回调场景; wraps解决装饰器导致的元数据丢失问题,保留原函数名和文档说明。 通过URL构建器和日志装饰器案例,展示了它们如何优化代码复用性和可维护性。开发者需注意partial会覆盖默认参数,未使用wraps可能影响调试。灵活运用这些工具能显著提升Python开发效率。
2025-08-02 07:34:40
100
原创 探索 Python 的 `lambda` 函数:简洁的利器与其限制
Python 的 lambda 函数是一种简洁的匿名函数,适合处理简单逻辑和临时运算。本文探讨了其特点、应用场景(如数据处理、排序和回调函数)及限制(仅支持单表达式、缺乏文档和调试困难),并与普通 def 函数进行对比。文章建议在简单场景使用 lambda,复杂逻辑则选择普通函数,并提供了重构示例。最后提出开放性问题,邀请读者分享使用经验。lambda 虽便捷,但需合理使用以确保代码可读性和可维护性。
2025-08-02 06:59:20
853
原创 探索 Python 的闭包:从概念到实践与 LEGB 规则支持
本文深入探讨了Python中的闭包概念及其实际应用。闭包是指能够记住并访问其定义环境变量的函数,它需要满足嵌套函数、引用外部变量和返回嵌套函数三个条件。文章通过示例展示了闭包在数据封装、惰性计算和函数工厂等场景的应用价值,并详细解释了Python的LEGB作用域规则如何支持闭包实现。同时指出了闭包变量动态绑定等注意事项,建议在复杂场景下可考虑使用类替代。最后提供了官方文档和推荐书籍等扩展学习资源,并鼓励读者分享闭包在实际项目中的应用经验。
2025-08-02 06:56:56
865
原创 《深度解析列表推导式、字典推导式与生成器表达式:性能与内存使用的实战剖析》
本文深入解析 Python 中的列表推导式、字典推导式和生成器表达式,对比它们在内存使用和性能上的差异。列表和字典推导式会立即计算并存储所有结果,适合小规模数据但内存占用高;生成器表达式惰性求值,按需生成数据,内存效率更高但访问稍慢。文章通过代码示例展示内存占用和执行速度差异,并提供最佳实践建议:小数据用推导式简洁高效,大数据用生成器避免内存爆炸。最后强调根据数据规模选择合适工具,并保持代码可读性。
2025-08-01 06:28:34
17
原创 《深度解析 uvloop:如何为 asyncio 性能注入强劲动力》
摘要: uvloop 是基于 libuv 的高性能事件循环库,可无缝替换 Python asyncio 的默认事件循环,显著提升 I/O 性能。其优势包括:基于 libuv 的高效轮询机制、减少系统调用开销、内存分配优化及多线程友好性。安装后通过简单代码即可启用,兼容现有 asyncio 代码。实测显示,在高并发 HTTP 请求和实时数据处理场景中,性能可提升 30%-40%。但需注意其仅支持类 Unix 系统,且对 Windows 特有功能不兼容。作为异步编程优化利器,uvloop 为高并发场景提供高效解
2025-08-01 06:25:27
54
原创 《深度揭秘 asyncio 调试技巧:协程阻塞与资源竞争的解决方案》
本文深度解析Python asyncio调试技巧,针对协程阻塞、资源竞争等常见问题提供解决方案。文章介绍了日志分析、启用调试模式、任务诊断等核心调试方法,并结合实战案例展示如何解决协程"饥饿"和资源竞争问题。高级技术部分涵盖动态断点和性能分析工具的使用。通过系统的方法论和实用代码示例,帮助开发者快速定位和解决异步编程中的复杂问题,提升应用性能。
2025-08-01 06:23:00
387
原创 《深度揭秘 asyncio 调试技巧:协程阻塞与资源竞争的解决方案》
本文介绍了Python asyncio调试的关键技巧,重点解决协程阻塞与资源竞争问题。通过日志分析、调试模式启用、任务诊断和性能监测等方法,帮助开发者精准定位异步编程中的性能瓶颈。文章提供多个实战案例,如使用Semaphore控制并发、PriorityQueue分配任务优先级、Lock解决资源竞争等方案,并分享高级调试技术如动态断点和性能分析工具。掌握这些技巧能有效优化异步应用性能,应对复杂场景下的调试挑战。
2025-08-01 05:55:33
390
原创 异步与阻塞的共舞:处理阻塞 I/O 的最佳实践
本文探讨了在异步编程中处理阻塞I/O的最佳实践。当同步操作(如文件读取、数据库查询)出现在异步代码中时,会阻塞事件循环,降低性能。解决方案包括:1)使用run_in_executor()将阻塞操作移至线程池;2)对计算密集型任务采用进程池;3)设计异步适配器封装阻塞函数。文章还提供了优化线程池大小、避免过度使用和调试监控等建议,并通过文件读取案例展示实践应用。这些方法能有效提升异步程序的性能和可维护性。
2025-07-31 07:48:59
20
原创 协程调度的奥秘:深入理解 `asyncio` 中的控制权转移
摘要:协程调度与 asyncio 控制权转移机制 本文深入解析 Python asyncio 框架中协程调度的核心机制。协程通过 await 主动让出控制权,由事件循环调度任务队列实现并发执行。文章从基础调度原理出发,剖析了任务优先级管理、共享资源保护(如 asyncio.Lock)等关键技术,并通过爬虫案例展示实际应用。调试技巧(如 asyncio.all_tasks())和自定义调度策略的示例,为开发者提供了优化异步程序的实用方法。最终揭示协程如何通过高效调度实现单线程高并发,为构建高性能异步应用奠定基
2025-07-31 05:50:32
358
原创 协程下的同步守护:使用 `asyncio.Lock` 安全管理共享资源
本文探讨了如何在Python异步编程中使用asyncio.Lock安全管理共享资源。通过实例分析竞态条件问题,展示了锁机制如何确保数据一致性。文章介绍了锁的基本用法、最佳实践(如使用上下文管理器),并讨论了避免死锁的方法。最后通过生产者-消费者模型演示了锁的实际应用,为异步编程中的资源共享提供了安全高效的解决方案。
2025-07-31 05:48:49
340
原创 《深度解析 Python 异步魔法:`asyncio.gather` vs `asyncio.wait` 的使用与区别》
本文深入解析 Python 异步编程中 asyncio.gather 和 asyncio.wait 的区别与使用场景。asyncio.gather 适合批量执行无依赖任务并收集结果,而 asyncio.wait 提供更灵活的任务控制,支持动态响应任务状态。文章通过代码示例对比二者特性,并给出综合应用案例,帮助开发者根据实际需求选择合适工具。最后提出最佳实践建议,强调任务拆分、异常处理和资源优化的重要性。掌握这两个工具能显著提升异步代码的效率和可维护性。
2025-07-29 07:29:07
717
原创 《全面解析 Python 的线程池与进程池:`ThreadPoolExecutor` vs `ProcessPoolExecutor`》
摘要: Python 的 concurrent.futures 模块提供了 ThreadPoolExecutor(线程池)和 ProcessPoolExecutor(进程池)两种并发执行器。线程池轻量高效,适合 I/O 密集型任务(如网络请求),但受限于 GIL;进程池能绕过 GIL,实现真正并行,适合 CPU 密集型任务(如矩阵运算),但开销较大。实际应用中需根据任务类型选择:I/O 密集用线程池,CPU 密集用进程池。优化建议包括分类任务、合理设置并发数及处理异常。两者结合可高效完成复杂任务,如用线程池
2025-07-29 07:27:23
541
原创 《深入解析 Python multiprocessing:进程间通信的技巧与权衡》
本文深入解析 Python multiprocessing 模块中的进程间通信技术,对比了队列(Queue)、管道(Pipe)、共享内存和管理器(Manager)四种方式。Queue 适合生产-消费模型但存在性能瓶颈;Pipe 高效但仅限双进程通信;共享内存无序列化开销但管理复杂;Manager 支持复杂数据结构却性能一般。文章通过代码示例说明用法,并总结各自的优缺点和适用场景,帮助开发者根据实际需求选择最佳方案。理解这些工具的特性将显著提升并行编程效率。
2025-07-29 07:25:05
56
原创 《告别回调地狱:用 async/await 让 Python 异步编程更优雅》
摘要:本文探讨了如何用 Python 的 async/await 解决异步编程中的回调地狱问题。传统回调方式导致代码嵌套深、可读性差,而 asyncio 模块通过协程和事件循环机制,使异步代码更简洁优雅。文章通过文件处理示例对比了两种实现方式,并展示了异步爬虫的实战案例,分析了并发处理、资源管理等关键点。最后提出了任务取消、性能优化等最佳实践,展望了 Python 异步编程的未来发展。async/await 显著提升了代码可维护性和执行效率,是处理 I/O 密集型任务的理想选择。
2025-07-29 07:23:18
460
Apache Tomcat 安装与配置详解.zip
2025-03-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人