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.

Заключение

Да, на данный момент проект ещё сырой и местами криво написан, нет полного покрытия тестами, но вы всегда можете стать его контрибьютором, указать на какую-либо ошибку или предложить фичу.

Ссылка на проект

Ссылка на документацию

Комментарии (4)


  1. bak
    22.04.2023 17:04
    +2

    Асинхронный фреймворк и при этом синхронные view? Очень интересно )

    И кстати, свежий django уже во многом поддерживает асинхронность, например асинхронные view и orm.


    1. KAINeDEZZ Автор
      22.04.2023 17:04
      +1

      Бывают редкие кейсы, когда асинхронность не нужна во вьюхе, думаю, дать разработчику возможность сделать вьюху синхронной имеет место быть.

      Касаемо джанги: постоянно использоватьsync_to_async не очень приятно, да и загромождает код этими костылями, ну а работа с соккетами там, как по мне - отдельный вид мазахизма)


      1. Nasreddin_Hodja
        22.04.2023 17:04

        Но тогда там возникает проблема с мидлварями, стандартными или сторонними, которые должны уметь работать в обоих режимах.


  1. Nasreddin_Hodja
    22.04.2023 17:04

    О, роутинг не декораторами, уже хорошо.