python 中 BaseModel 在这里有什么用?

需求: 注册:用户名和密码 -> str

python 复制代码
from pydantic import BaseModel

class User(BaseModel):
    username: str
    password: str
    
@app.post("/register")
async def register(user: User):
    return user

python 中 BaseModel 在这里有什么用?

回答:

一句话核心答案

BaseModel 是 FastAPI 用来自动接收、校验、格式化 JSON 请求体的核心工具。

它能让你不用手动解析 JSON,直接拿到一个干净、安全、类型正确的对象。

你的代码里,BaseModel 做了 4 件大事

你写的这段:

python 复制代码
class User(BaseModel):
    username: str
    password: str

它的作用就是:

1. 自动接收前端传来的 JSON

前端传这样的数据:

json 复制代码
{
  "username": "张三",
  "password": "123456"
}

FastAPI 会自动把它转成 User 对象给你用。


2. 自动校验数据类型(非常重要)

如果前端传错了,比如:

json 复制代码
{
  "username": 123,   // 数字,不是字符串
  "password": true
}

FastAPI 会直接报错:422 格式错误

不用你写任何判断代码!


3. 自动生成接口文档

访问:

text 复制代码
http://localhost:8000/docs

你会看到:

  • /register 接口
  • 请求体格式
  • 参数类型
  • 字段说明

全是 BaseModel 自动生成的!


4. 让你写代码更舒服(智能提示)

在函数里你可以直接写:

python 复制代码
user.username
user.password

编辑器会自动提示,不会写错单词,不会报错。


如果不用 BaseModel 会怎样?

你必须自己写:

python 复制代码
@app.post("/register")
async def register(body: dict):
    username = body.get("username")
    password = body.get("password")

    # 自己判断类型
    if not isinstance(username, str):
        return {"error": "用户名必须是字符串"}

又麻烦又容易错!


超级总结

BaseModel 的作用就是:

✅ 自动接收 JSON

✅ 自动校验数据类型

✅ 自动生成接口文档

✅ 让代码更简洁、更安全

你现在写的这段代码,就是 FastAPI 最标准、最推荐的注册接口写法!

相关推荐
WeiXin_DZbishe11 分钟前
基于Springboot+AI的kuall音乐广场的设计与实现-计算机毕设 附源码【课程设计】12715
vue.js·人工智能·spring boot·后端·python·php·课程设计
沫璃染墨44 分钟前
《Qt从零入门系列(十三):QSS样式表详解——从选择器与层叠规则到控件美化实战》
开发语言·css·c++·qt·ui·qt6.3·qss
达子6661 小时前
RUST 图解 第 3 章:通用编程概念(Common Programming Concepts)
开发语言·算法·rust
imgsq2 小时前
电子学会考级 vs CCF-GESP:两套少儿编程考级怎么选
python·青少年编程
道尔柯南2 小时前
C++ 面向对象编程入门:类和对象(上)
开发语言·c++·算法
楠楠子呀2 小时前
英语、西语、阿语客户各开一个口:多语言获客的分流方案
开发语言·javascript·ecmascript·跨境电商·whatsapp·营销工具
tachibana22 小时前
使用for range 的时候,它的地址会发生变化吗?
开发语言·后端·golang·go·语法
Smoothcloud润云2 小时前
PyTorch推理服务动态批处理实战:兼顾吞吐与延迟
人工智能·pytorch·python·深度学习·ai·gpu算力
码爸2 小时前
决策树介绍与示例
python·算法·机器学习
临床数据科学和人工智能兴趣组3 小时前
正则表达式的基础语法的基本符号
开发语言·人工智能·python·正则表达式·r语言·r语言-4.2.1·workbudyy