问题描述
我在项目上使用Fastapi,Fastapi用户和TortoiSEOrm进行身份验证。
我遵循了FastApi用户网站上的示例,当我尝试在注册用户处添加一些额外字段时,出现此错误:
RuntimeError:未找到
的验证器,请参见Config中的random_types_allowed
这是我的代码,谢谢您的帮助!
from tortoise import fields
from tortoise.contrib.pydantic import pydantic_model_creator
from fastapi_users import models
from fastapi_users.db import TortoiseBaseusermodel,TortoiseUserDatabase
from tortoise.contrib.starlette import register_tortoise
class User(models.BaseUser):
nombre = fields.CharField(max_length=100)
apellidos = fields.CharField(max_length=100)
class UserCreate(models.BaseUserCreate):
pass
class UserUpdate(User,models.BaseUserUpdate):
pass
class UserDB(User,models.BaseUserDB):
pass
class usermodel(TortoiseBaseusermodel):
pass
user_db = TortoiseUserDatabase(UserDB,usermodel)
解决方法
您可以添加自定义属性
from typing import Optional
from pydantic import Field
class User(models.BaseUser):
nombre : Optional[str] = Field(max_lenght="100")
apellidos :Optional[str] = Field(max_lenght="100")
Also to have these fields(nombre and apellidos) appear in you path function as properties and have them included in
will need to make changes to the fastapi_users library.
If you are using a virtual environment like I am,there's a **Lib** folder that holds all the libraries you've installed and more.
Look for the **fastapi_users folder** and go into the **models.py** file and update with your new properties and do same in the db file(update the db that you are using for your project.
Happy computing!!
,
我在使用 FastAPI 用户和 SQlAlchemy 时遇到了类似的错误。对我有用的是在定义它时将自定义字段(在您的情况下为 nombre 和 appelidos)添加到 4 个用户模型中的每一个和 UserModel 表中
schema.py 文件
from fastapi_users import models
class User(models.BaseUser):
sid: int
fname: str
lname: str
class UserCreate(models.BaseUserCreate):
sid: int
fname: str
lname: str
class UserUpdate(User,models.BaseUserUpdate):
sid: int
fname: str
lname: str
class UserDB(User,models.BaseUserDB):
sid: int
fname: str
lname: str
models.py 文件
from sqlalchemy import Column,Integer,String
from fastapi_users.db import SQLAlchemyBaseUserTable
from db import Base
class UserTable(Base,SQLAlchemyBaseUserTable):
sid = Column(Integer)
fname = Column(String)
lname = Column(String)