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

自己做网站 需要会什么6vs做网站创建项目时选哪个

自己做网站 需要会什么6,vs做网站创建项目时选哪个,具有价值的广州做网站,在百度上做购物网站欢迎来到啾啾的博客🐱。 记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。 有很多很多不足的地方,欢迎评论交流,感谢您的阅读和评论😄。 目录引言1 FastAPI事件管理2 类的使用2.1 初始化方法对…

欢迎来到啾啾的博客🐱。
记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。
有很多很多不足的地方,欢迎评论交流,感谢您的阅读和评论😄。

目录

  • 引言
  • 1 FastAPI事件管理
  • 2 类的使用
    • 2.1 初始化方法对比
    • 2.2 Pydantic的构造
  • 3 依赖管理
  • 4 类方法和静态方法
    • 4.1 @classmethod

引言

在之前的《FastAPI快速入门》中,我们对服务器搭建、依赖注入、接口定义与Pydantic模型有了基本了解。本篇继续深入FastAPI的核心机制,并与Java生态的SpringBoot进行对比,帮助Java开发者快速建立技术映射。

1 FastAPI事件管理

FastAPI 提供了 startup 和 shutdown 事件来处理应用启动和关闭时的逻辑,类似于 Spring Boot 的ApplicationRunner@PreDestroy
不过, on_event 在较新版本中已被弃用,推荐使用 lifespan 处理应用生命周期事件。

from contextlib import asynccontextmanager
from fastapi import FastAPI# 现代 lifespan 处理方式
@asynccontextmanager
async def lifespan(app: FastAPI):# 启动逻辑 - 类似 @PostConstructprint("🚀 应用启动:数据库连接池初始化")cache = {"hot_items": load_hot_data()}yield cache  # 将资源传递给路由,即赋值给app.state# 关闭逻辑 - 类似 @PreDestroyprint("🛑 应用关闭:释放数据库连接池")cache.clear()app = FastAPI(lifespan=lifespan)  # 注入 lifespan@app.get("/items")
async def get_items():return app.state["hot_items"]  # 直接使用初始化资源

连接池示例

@asynccontextmanager
async def lifespan(app: FastAPI):# 初始化 PostgreSQL 连接池app.state.db_pool = await asyncpg.create_pool(dsn=os.getenv("DB_DSN"),min_size=5,max_size=20)# 初始化 Redis 客户端app.state.redis = await aioredis.from_url("redis://localhost", encoding="utf-8",decode_responses=True)yield# 资源清理await app.state.db_pool.close()await app.state.redis.close()

对比SpringBoot

// Spring Boot 等效实现
@SpringBootApplication
public class DemoApp implements ApplicationRunner {@Autowiredprivate DataSource dataSource;@PreDestroypublic void onExit() {System.out.println("🛑 释放资源");}@Overridepublic void run(ApplicationArguments args) {System.out.println("🚀 初始化完成");}
}

FastAPI采用显式事件注册,SpringBoot通过接口/注解实现,后者更符合Java的约定优于配置原则。

特性FastAPI (lifespan)Spring Boot
事件类型异步上下文管理器接口实现 + 注解
资源传递yield 返回 → 直接注入路由通过 ApplicationContext
错误处理自带 try/finally 语义需手动实现销毁逻辑
依赖注入通过 app.state 访问@Autowired 自动装配
多阶段初始化单入口统一管理多种初始化接口可选

![[FastAPI声明周期.png]]

2 类的使用

2.1 初始化方法对比

Python中有__new____init__方法可以用于在对象实例创建时执行一些操作。

class Service:def __new__(cls):print("1. 分配内存 → 类似Java的new关键字")return super().__new__(cls)def __init__(self):print("2. 初始化属性 → 类似Java的构造函数")self.cache = {}

__new__方法比__init__先调用。
Java等效实现如下:

public class Service {private Map<String, Object> cache;public Service() {System.out.println("构造函数初始化");this.cache = new HashMap<>();}
}
  • cls 与 self
    cls代表类本身。在调用类方法时,Python会自动将类对象作为第一个参数传递给方法。通过 cls 能够访问和修改类的属性,还能创建类的实例。
    self 代表类的实例对象。在调用实例方法时,Python 会自动将实例对象作为第一个参数传递给方法。借助 self 可以访问和修改实例的属性和方法。

2.2 Pydantic的构造

Pydantic模型是默认支持全参构造,等效于@NoArgsConstructor+@AllArgsConstructor的。
且可以通过关键字或字典解包,所以不会有Java的构造函数参数膨胀问题。

from pydantic import BaseModelclass User(BaseModel):name: strage: int# 构造方式1:关键字参数
user = User(name="Alice", age=30) # 自动触发类型验证错误# 构造方式2:字典解包
data = {"name": "Alice", "age": 30}
user = User(**data)

SpringBoot等效

// Lombok简化构造
@Data 
@AllArgsConstructor 
public class UserDTO {private Long id;private String name;private String email;
}

3 依赖管理

使用Spring框架时,对象交由框架处理,默认单例,且可以做到复杂的依赖管理。
FastAPI的依赖系统轻量但强大,也支持函数/类级别注入:

from fastapi import Dependsdef get_db_session():print("创建DB会话 → 类似Spring的@Bean")yield session  # 通过yield实现资源清理print("关闭DB会话")@app.get("/users")
def get_users(db = Depends(get_db_session)):return db.query(User).all()

类似于SpringBoot

@RestController
public class UserController {private final UserRepository repo;  // 构造器注入public UserController(UserRepository repo) {this.repo = repo;}@GetMapping("/users")public List<User> getUsers() {return repo.findAll();}
}@Repository  // 自动装配
public interface UserRepository extends JpaRepository<User, Long> {}

核心差异

特性FastAPISpring Boot
作用域函数级控制完整的Bean作用域
生命周期显式yield管理容器自动管理
配置复杂度低(Python动态特性)高(需学习Spring生态)
AOP支持有限(通过中间件)完善(@Aspect等)

4 类方法和静态方法

4.1 @classmethod

使用装饰器 @classmethod装饰的类和Java中的静态方法一样,可以直接通过类名调用。
不同的是@classmethod装饰的方法有默认入参cls。

class Validator:@classmethoddef validate_email(cls, email: str) -> bool:return "@" in email  # cls可访问类属性# 直接类调用 → 类似Java静态方法
Validator.validate_email("test@ex.com")

Java等效如下:

public class Validator {public static boolean validateEmail(String email) {return email.contains("@");}
}

关键区别:Python的类方法自动获取cls参数,可访问类状态,而Java静态方法无this/cls概念。

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

相关文章:

  • 济南seo网站优化古典网站建设欣赏
  • 网站标题如何书写财经网站建设方案
  • 建设一个国外服务器的网站新开传奇网站999新服网
  • 建设银行网站官网网址wordpress内容折叠
  • wordpress 网站 上传蚂蚁币是什么网站建设
  • 音乐网站开发开发好看的页面
  • 【PyTorch】基于YOLO的多目标检测(二)
  • 没有网站怎么做排名优化麻将app软件开发
  • 网站 后台 安装网站地图 设计
  • 网站开发做前端还是后端网站建设百科
  • 电子商务网站建设开题报告盗用网站模板
  • 音乐网站建设流程班级设计网站建设
  • 网站建设做的快营销型网站图片
  • 网站开发公司 网站空间能打开那种网站的手机浏览器
  • 玩具网站 下载设计师装修网
  • 建设银行网站背景wordpress点击文章不能进入
  • 四川煤矿基本建设工程公司网站外贸seo建站
  • 上海创意网站建设汽车零部件公司网站建设方案
  • 网站开发需要用到哪些资料一起做网站吧
  • wordpress做视频网站吗网站后台如何修改新闻发布时间
  • UNIX下C语言编程与实践40-UNIX 全局跳转:setjmp 与 longjmp 函数的使用与注意事项
  • 请网站建设的人多少钱网页特效梦工厂
  • 合肥网站忧化发帖网站百度收率高的
  • ORB_SLAM2原理及代码解析:Tracking::TrackWithMotionModel() 函数
  • 基于51单片机超声波测液位测距仪水位监测报警设计
  • 制作网站 优帮云德清县新巿镇城市建设网站
  • 武义县建设局网站首页子网站怎么建设
  • 湖州北京网站建设开发工具包
  • 凡科网建网站付费链接怎么做网站建设 面试问题
  • 模板网站建设教程视频做企业官网需要注意什么