你好,我是Kuls。
这是《小白学FastAPI》系列的第六篇文章。
今天我们主要来聊一聊FastAPI里的响应模型。
可能很多读者朋友不太清楚响应模型是啥,但是我可以举一个很简单的例子让大家明白。
例如在我们的用户表中有以下几个字段:
username、password、name、age、gender
依次的意思就是用户名、密码、昵称、年龄、性别。
当我们想要去获取所有的用户,也就是做一个用户列表时,我们其实并不想把密码给展示出来。
因为在实际的项目中,密码都是加密存在的,我们也不可能会给别人展示出密码。
我们只需要username、name、age、gender这几个字段的信息,但是如何去除掉password的呢?
这就是我们今天要讲的响应模型,也就是响应用户请求的模型。
首先我们建立一个User模型:
models.py
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True, index=True) # 设置主键和索引
username = Column(String(32))
password = Column(String(32))
age = Column(Integer)
gender = Column(String(32))
schemas.py
class User(BaseModel):
username : str
password : str
age : int
gender : str
然后在main.py中编写获取所有用户的函数
@app.get('/users')
def get_users( db: Session = Depends(get_db)):
users = db.query(models.User).all()
return users
我们自己手动添加几条数据,跑一下。
unvicorn blog.main:app --reload
打开swagger,执行方法后
数据是正常打印出来了。
那么此时我们如何去让password消失掉呢?
其实也比较简单,我们只需要编写schemas.py里面:
添加一个ShowUser的schemas
class ShowUser(BaseModel):
username : str
age : int
gender : str
class Config(): # 注意此处
orm_mode = True
添加完成之后,我们去main.py里面,刚刚编写的函数
from typing import List
@app.get('/users',response_model=List[schemas.ShowUser])
def get_users( db: Session = Depends(get_db)):
.......
因为我们返回的是一个List,所以我们需要从typing中导入List。并且在@app.get修饰器中添加了,response_model=List[schemas.ShowUser])。
除了get的修饰器,其他的例如@app.get()、@app.post()、@app.put()、@app.delete()都是可以添加的。
我们可以看到,password没有显示出来了。
可能很多读者会觉得这有啥用呢?放心,之后你会在很多场景中用到。这里就不一一给大家展示了。
关于响应模型我建议大家看完本文后,继续阅读官方文档中给出的教程:
https://fastapi.tiangolo.com/zh/tutorial/response-model/