python fastapi tips
集成prometheus
from prometheus_fastapi_instrumentator import Instrumentator
instrumentator = Instrumentator()
instrumentator.instrument(app)
@app.on_event("startup")
async def _startup():
instrumentator.expose(app,endpoint="/healthz/metrics",tags=["healthz"])
过滤health check 日志
import logging
class EndpointFilter(logging.Filter):
def filter(self, record: logging.LogRecord) -> bool:
return record.getMessage().find("/healthz") == -1
logging.getLogger("uvicorn.access").addFilter(EndpointFilter())
sqlmodel自定义postgres schema
from sqlmodel import SQLModel, Field
class Item(SQLModel, table=True):
__table_args__ = {'schema': 'myschema'}
sqlmodel自定义postgres 列名
from sqlmodel import SQLModel, Field
class Item(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True,sa_column_kwargs={"name": "myId"})
fastapi docker ci
bitbucket pipeline里需要先cd到根目录
FROM python:3.13 AS base
WORKDIR /app
EXPOSE 80
COPY ./requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
COPY ./app /app/app
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
部署到k8s swagger报错
ingress带path导致, 设置root_path,增加一个环境变量ROOT_PATH,本地设为空,其它环境则设为域名后面的path
app = FastAPI(
docs_url="/swagger",
root_path= settings.ROOT_PATH
)
作者: 马行空的博客
出处: https://www.cnblogs.com/netry/p/18783421/python-fastapi-tips
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。