FastAPI - 如何生成随机 ID?

FastAPI - how to generate random ID?

我正在使用 FastAPI 进行简单的 CRUD API,我想做的是在创建新项目时生成唯一的随机数(其他字段是地址和名称,应由用户填写).我该怎么做?

我的代码片段有 class 和 POST 函数。

app = FastAPI()

userdb = []

class User(BaseModel):
    id: int
    address: str
    name: str

@app.post("/users")
def add_user(user: User):
    userdb.append(users.dict())
    return userdb[-1]

uuid4 通常是要走的路

ever用函数anywhere生成的任何id中绝对是独一无二的,具有天文数字的可能性(参考RFC-4122 Section 4.4) 并且非常快

from uuid import uuid4

...
    unique_id = str(uuid4())

另一种选择 - 通常您想要的是此 ID 不一定是随机的,而是来自您的数据库的一些自动递增索引。 FastAPI 文档给出了一个例子:

...

notes = sqlalchemy.Table(
    "notes",
    metadata,
    sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True),
    sqlalchemy.Column("text", sqlalchemy.String),
    sqlalchemy.Column("completed", sqlalchemy.Boolean),
)

...
class NoteIn(BaseModel):
    text: str
    completed: bool

class Note(BaseModel):
    id: int
    text: str
    completed: bool

...

@app.post("/notes/", response_model=Note)
async def create_note(note: NoteIn):
    query = notes.insert().values(text=note.text, completed=note.completed)
    last_record_id = await database.execute(query)
    return {**note.dict(), "id": last_record_id}

https://fastapi.tiangolo.com/advanced/async-sql-databases/?h=id#about-notedict-id-last_record_id

在您的情况下,您将为 UserInUser 使用单独的模型。然后在您的示例中,您会将响应模型中的 ID 分配为 userdb 列表中的索引(在实际应用程序中,它可能不仅仅是一个列表,而是一个数据库)。

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

userdb = []

class UserIn(BaseModel):
    address: str
    name: str

class User(BaseModel):
    id: int
    address: str
    name: str

@app.post("/users")
def add_user(user_in: UserIn) -> User:
    userdb.append(user_in)
    user_out_dict = userdb[-1].dict()
    user_out_dict.update({"id": len(userdb)-1})
    return User(**user_out_dict)