Jija - это асинхронный Python фреймворк, который разрабатывается для облегчения создания асинхронных веб-приложений. Фреймворк предоставляет удобный интерфейс для обработки запросов и формирования ответов, а также поддерживает работу с базами данных и созданием документации.
При создании jija я думал об удобстве использования сборщика приложения джанги и лёгкости и асинхронности fastapi.
Вы можете быстро создать сервис, который спокойно работает в асинхроне, и создания структуры и сборки которого вам не нужно париться, как это происходит с fastapi, сборщик сделает всё за вас, прямо как в django, но в разы меньше настроек.
Краткий экскурс
Для работы с Jija, сначала нужно установить его с помощью pip:
pip install jija
Теперь надо создать пуру базовых файлов
main.py, который будет использоваться как точка входа
from jija.apps import Apps
if __name__ == '__main__':
import settings
Apps.run_command()
settings.py, основной файл настроек
from pathlib import Path
from jija import config
config.StructureConfig(
project_path=Path(__file__).parent
)
config.NetworkConfig(
host='localhost',
)
Тут мы указали корневую папку проекта и адрес, на котором запустится сервер
Если вы используете виртуальную среду и её файлы лежат в папке проекта, необходимо добавить ещё одну настройку, которая исключит проверку файлов виртуальной среды на изменение
config.DevConfig(
reloader_excluded={'venv'}
)
После того как основные файлы заполненны, переходим к созданию вьюх и роутов к ним
apps/my_app/views.py
from jija import views, response
class MyView(views.View):
def get(self):
return response.JsonResponse({'status': 'ok'})
apps/my_app/routes.py
from jija import router
from .views import *
routes = [
router.Endpoint('/', MyView),
]
После чего запускаем команду python main.py run
и открываем браузер на http://localhost:8080/
Возможно, у вас начали появляться мысли по типу: "Это же куда сложнее чем запустить тоже самое на fastapi", с чем я конечно соглашусь, но если надо будет сделать что-то более сложное, то со структурой в fastapi тоже придётся повозиться и кода там будет значительно больше, а писать впадлу.
На данный момент в нём реализованны следущие функции:
Сериализаторы
Поддержка свагера
Поддержка ORM
Базовая поддержка авторизации
Ещё предстоит сделать:
Переработать концепцию авторизации
Добавить больше типов авторизации
CLI для создания проекта
Доку по референсам
Доку по драйверам
Запихнуть поддержку WS в свагер
Поддержку нормального продакшн режима
Поддержку команд пользователя
Поддержку командной строки
Так же планирую развивать фреймворк в сторону модульности, чтобы можно было заменить любой компонент на тот, который вам больше нравится и связать его с остальными с помощью драйвера, что уже реализовано с ORM.
Заключение
Да, на данный момент проект ещё сырой и местами криво написан, нет полного покрытия тестами, но вы всегда можете стать его контрибьютором, указать на какую-либо ошибку или предложить фичу.
bak
Асинхронный фреймворк и при этом синхронные view? Очень интересно )
И кстати, свежий django уже во многом поддерживает асинхронность, например асинхронные view и orm.
KAINeDEZZ Автор
Бывают редкие кейсы, когда асинхронность не нужна во вьюхе, думаю, дать разработчику возможность сделать вьюху синхронной имеет место быть.
Касаемо джанги: постоянно использовать
sync_to_async
не очень приятно, да и загромождает код этими костылями, ну а работа с соккетами там, как по мне - отдельный вид мазахизма)Nasreddin_Hodja
Но тогда там возникает проблема с мидлварями, стандартными или сторонними, которые должны уметь работать в обоих режимах.