FastApi & MongoDB

FastApi & MongoDB - the full guide: https://github.com/tiangolo/fastapi/issues/1515

# -*- coding: utf-8 -*-
from datetime import datetime
from typing import Optional

from bson import ObjectId
from bson.errors import InvalidId
from fastapi import FastAPI
from pydantic import BaseConfig, BaseModel, Field

app = FastAPI()


class PyObjectId(str):
    @classmethod
    def __get_validators__(cls):
        yield cls.validate

    @classmethod
    def validate(cls, v):
     if isinstance(v, ObjectId):
      return v
   try: return ObjectId(str(v)) except InvalidId: raise ValueError("Not a valid ObjectId") class MongoModel(BaseModel): id: Optional[PyObjectId] = Field(..., alias='_id') class Config(BaseConfig): json_encoders = { datetime: lambda dt: dt.isoformat(), ObjectId: lambda oid: str(oid), } class User(MongoModel): name: str = Field() @app.post('/me', response_model=User) def save_me(body: User): assert isinstance(body.id, ObjectId) return body

 

 

 

 

 

posted @ 2021-03-10 12:01  薄荷味日记  阅读(289)  评论(0编辑  收藏  举报