Package: hackpi
HackPiHackPi - is a library for the FastAPI framework that adds additional functionality that simplifies development.IntroductionFeatures:Генерация endpoints по моделям SQLAlchemy и PydanticГотовые методы регистрации, авторизацииСистема ролей с возможностью ограничения доступаБиблиотека может использоваться для быстрого прототипирования бекенда, либо для построения функционала для хакатонов.InstallingЧтобы установить библиотеку, выполните в терминале простую команду:pip3installhackpiЧтобы проверить наличие библиотеки на компьютере, нужно ввести следующую команду:pip3listИ в выведенном вы увидите библиотеку hackpi с текущей версией (актуальная - 0.1.1).Ура! Теперь вы можете пользоваться всеми возможностями HackPi.UsageПодключение к базе данныхДля подключения к базе данных используется классDatabase. При содании объекта этого класса, нужно передать в конструктор расположение SQLite3 базы данных. Пока что HackPi может работать только с этой базой данных.# db.pyfromhackpiimportDatabasedb=Database('sqlite:///database.sqlite3')В последствии, мы можем передавать объектdbв другие методы, которые будут записывать информацию в базу данных.Модели SQLAlchemy и PydanticВ этом туториале вы увидите работу библиотеки на примере работы с пользователем. Нам всегда необходимо иметь две модели: модель SQLAlchemy и модель Pydantic.# models.pyfromhackpiimportBasefromsqlalchemyimportColumn,Integer,StringfromdbimportdbclassUser(Base):__tablename__='users'id:int=Column(Integer,primary_key=True)email:str=Column(String,unique=True)password:str=Column(String)db.create_all()Разберем файлmodels.py. Мы создали модель SQLAlchemy, наследовав ее отBase. Название таблицы -users. Таблица имеет следующие столбцы:id,email,password. Затем, мы вызвали метод для создания таблицы в базе данных.# schemas.pyfrompydanticimportBaseModelclassUser(BaseModel):email:strpassword:strМы создали простую схему Pydantic, которая содержит в себе толькоemailиpassword.Создание роутеровИтак, чтобы сгенерировать эндпоинты, используя модели SQLAlchemy и Pydantic, необходимо создатьmain.pyфайл, и написать в нем следующее:# main.pyfromfastapiimportFastAPIfromhackpiimportHackPi,RouterfrommodelsimportUserasUserModelfromschemasimportUserasUserSchemafromdbimportdbapp=FastAPI()hp=HackPi(db=db)router=Router(hp,UserModel,UserSchema)app.include_router(router.get_router())Регистрация и авторизацияЕсли вы хотите добавить в свое приложение регистрацию и авторизацию, для этого существует классAuth. Введите следующий код, чтобы добавить это в свое приложение:# main.pyfromfastapiimportFastAPIfromhackpi.AuthimportHackPi,Auth,JWTfromdbimportdbapp=FastAPI()jwt=JWT('secret')hp=HackPi(db=db,jwt=jwt)app.include_router(Auth(hp)())Это добавит следующие эндпоинты:/sign-up/sign-in/get-users/get-user-by-id/userinfo-update/user-deleteРолевая системаЧтобы к некоторым эндпоинтам доступ могло иметь только ограниченное количество пользователей, можно добавить ролевую систему:# main.pyfromfastapiimportFastAPIfromhackpiimportHackPi,Router,JWT,Methods,StandartRolesfrommodelsimportUserasUserModelfromschemasimportUserasUserSchemafromdbimportdbapp=FastAPI()jwt=JWT('secret')hp=HackPi(db=db,jwt=jwt)router=Router(hp,UserModel,UserSchema,{Methods.GET:[StandartRoles.MODER]})app.include_router(router.get_router())Введя командуuvicorn main:app --reloadв терминал, запустится бекенд. Можно перейти в документацию, и увидеть результат генерации эндпоинтов.⚠️ Библиотека не является полностью безопасной и не должна быть использована на реальных продакшен решениях!