我有一个使用FastApi的Python 3.8应用程序。< code>main.py中的路由越来越多,所以我采用了从FastApi application
对象切换到< code>router的方法,并将每个db表的路由放在自己的文件中。到目前为止,由于对< code>response_model装饰器的解释,它还没有工作。
开关导致我修改后的代码与response_model装饰器Post
有麻烦。最大的区别是我使用的是router
装饰器,而不是main中的应用程序
装饰器。
我得到的具体错误是:
File "/Users/markwardell/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages/fastapi/utils.py", line 67, in create_response_field
raise fastapi.exceptions.FastAPIError(
fastapi.exceptions.FastAPIError: Invalid args for response field! Hint: check that typing.List[models.Post] is a valid pydantic field type
导致此错误的代码在post.py
中,我从main.py
post.py
从fastapi导入HTTPException,从sqlalchemy导入APIRouter。form import Session从fastapi键入import List。params导入依赖
import models
from database import get_db
router: APIRouter = APIRouter()
@router.get("/postss", response_model=List[models.Post])
def get_post(db: Session = Depends(get_db)):
# cursor.execute("""SELECT * FROM posts""")
# posts = cursor.fetchall()
# print(posts)
try:
posts = db.query(models.Post).all()
except Exception as ex:
msg = f"Unexpected {ex=}, {type(ex)=}"
raise HTTPException(status_code=500, detail=msg)
return posts
工作的原始代码:
main.py
从Fastapi导入FastAPI、响应、HTTP异常从fastapi.params导入取决于从starlette导入状态导入用户导入帖子
import models
import schemas
from database import engine, get_db
from sqlalchemy.orm import Session
models.Base.metadata.create_all(bind=engine)
app = FastAPI()
app.include_router(user.router)
app.include_router(post.router)
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=8000)
@app.get("/")
async def root():
return {"message": "Welcome To My Api!"}
@app.get("/posts", response_model=List[schemas.Post])
def get_posts(db: Session = Depends(get_db)):
# cursor.execute("""SELECT * FROM posts""")
# posts = cursor.fetchall()
# print(posts)
try:
posts = db.query(models.Post).all()
except Exception as ex:
msg = f"Unexpected {ex=}, {type(ex)=}"
raise HTTPException(status_code=500, detail=msg)
return posts
以下是response_model的定义
schema.py
from datetime import datetime
from pydantic import BaseModel, EmailStr
class PostBase(BaseModel):
title: str
content: str
published: bool = True
class PostCreate(BaseModel):
pass
class Post(PostBase):
id: int
created_at: datetime
class Config:
orm_mode = True
arbitrary_types_allowed = True
class UserCreate(BaseModel):
email: EmailStr
password: str
class UserOut(BaseModel):
id: int
email: EmailStr
created_at: datetime
class Config:
orm_mode = True
response_model
定义中的类类型错误;引用应该指向您的模式(它继承自pydantic的BaseModel
)-您的response_model
指向您的SQLAlchemy模型(即模块名称中的schema
vsmodel
)。
我将Camel与Spring Boot一起使用。在基本上记录消息正文的服务路由实现过程中,我看到了如下所示的错误。 我的路线是: 我在日志正文行中出现错误。 我的问题是预期的行为?为什么Camel不只是调用对象的方法。如果这是预期的行为,那么我需要一个字符串转换器来处理每个新的复杂类型?
我已经使用graphql-tools缝合了两个graphqlendpoint。对于一个endpoint模式,它工作得很好,但对于另一个模式,它抛出了这个错误“GraphQlError:field not found in type:'query_root'”。即使我可以在自省的时候看到所有的模式。
考虑以下事项: 我有一个应用模板,一个HeaderTemboard,和参数化的路由集与相同的处理程序(在应用模板)。我希望在没有找到东西的时候能够服务404路线。例如, /CA/SanFrancisco应该由区域查找和处理,而 /SanFranciscoz应该是404。 下面是我如何快速测试路线的。 问题是 /SanFranciscoz总是由区域页面处理,但我希望它是404。此外,如果我向第一个路
我有以下路由器和路由使用反应路由器中继包 GraphQL中的My StoreType如下所示,用户字段接受表示非空整数的id参数: 路由的我的中继容器: 当我在浏览器中访问 /user/1时,react-router-中继将视为路由中的字符串而不是整数,并且GraphQL返回JSON编码的错误消息 有没有办法将URL中传递的userId参数转换为整数?或者是否有支持格式良好的数字字符串和整数的自定
我是react with typescript的初学者,在下面的代码中面临问题 下面是仪表板组件的代码 这是路线代码 在路线代码中,我面临类型问题,即。 E:/Web/src/router/route中的TypeScript错误。tsx(18,51): 没有重载匹配此调用。 重载1 of 2,'(props: ReadOnly): Road',给出以下错误。键入{Dashboard: string
我正在使用akka超文本传输协议设置一个rest控制器。控制器解析url,提取变量,然后调用一个服务,该服务向参与者发送消息,然后参与者查询存储库并将数据作为消息发送。我最终让参与者接收消息并查询回购(在不得不链接一系列期货之后),但现在我在控制器中遇到了一个我无法理解的错误: 这是否意味着我必须在其他地方包含一个完整的()。 我试图确保参与者发送一个未来作为其消息的内容,并且服务向控制器返回一个