Skip to main content

A Django-like framework built on FastAPI

Project description

FastTower

FastTower — это молодой фреймворк основанный на FastAPI для быстрого создания серверных приложений с Django-like структурой.

PyPI - Downloads Supported Python versions

Features

  • Легкая настройка
  • Высокая производительность
  • Простота в использовании
  • Админ панель

Быстрый старт

В настоящее время официально поддерживаться только tortoise orm и админ панель для нее, но вы можете легко добавить свою поддержку бд модернизируя FastTower app в asgi.py файле

Полный пример

Установка

pip install fasttower[tortoise]

Так же для управления миграциями требуется aerich, а именно его модернизированный форк

pip install git+https://github.com/pysashapy/taerich.git@0.0.1

Создание проекта

Для начала требуется сгенерировать основное приложение

tower g p example

После выполнения команды, вы можете обнаружить Django-like структуру проекта и сразу же запустить сервер

python manage.py run
Или другим сервером... ```bash uvicorn example.asgi:app ```

Обзор

Главная роль manage.py файла установить env FASTTOWER_SETTINGS_MODULE указывающею путь до вашего settings.py файла(* example.settings*). Вы можете установить ее сами и после этого использовать команду tower. Далее будет использоваться команда tower, но вы всегда можете использовать python manage.py

Запуск с установленной env... ```bash tower run ```

Структура проекта

asgi.py

FastTower - это полностью совместимый FastAPI class.

"""
ASGI config for example project.

It exposes the ASGI callable as a module-level variable named ``application``.
"""

import os

from fasttower.utils import setup

os.environ.setdefault("FASTTOWER_SETTINGS_MODULE", "example.settings")
setup()

from fasttower.server import FastTower

from example.routers import router

app = FastTower(title="FastTower API Documentation")

app.include_router(router)
Если не нужен tortoise... Уберите lifespan ```python lifespan=lifespans([tortoise_lifespan]) ```

settings.py

Вправду очень похоже на Django?

Основные поля: INSTALLED_APPS, MIDDLEWARE, USER_MODEL(Только tortoise!)

from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = "niJEjVCDfqHI_Fke_oUDVgcqkfWfW8ZEoUT_OQxVKco"

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ["*"]

INSTALLED_APPS = [
    'fasttower.apps.taerich',
    'fasttower.auth',
]

MIDDLEWARE = [
    ["fastapi.middleware.trustedhost:TrustedHostMiddleware", {"allowed_hosts": ALLOWED_HOSTS}],
    ["fastapi.middleware.gzip:GZipMiddleware", {"minimum_size": 1000, "compresslevel": 5}],
]
if DEBUG:
    MIDDLEWARE += ["debug_toolbar.middleware:DebugToolbarMiddleware"],

USER_MODEL = 'fasttower.auth.models:BaseUser'

ASGI = "example.asgi:app"

LANGUAGE_CODE = "en-us"
TIME_ZONE = "UTC"
USE_TZ = True

# Database
DATABASES = {
    "connections": {
        "default": {
            "engine": "tortoise.backends.sqlite",
            "credentials": {
                "file_path": str(BASE_DIR / "db.sqlite3"),
            }
        },
    },
}

# https://github.com/fastapi-admin/fastapi-admin
ADMIN_PANEL_REDIS = 'redis://localhost:6379/0'
INSTALLED_APPS

После создания нового приложения обязательно добавьте его в INSTALLED_APPS! Иначе у FastTower не будет доступа к моделям и командам приложения

MIDDLEWARE

Поддерживаются все starlette совместимые middleware!

Структура MIDDLEWARE

MIDDLEWARE = [
    ["fastapi.middleware.trustedhost:TrustedHostMiddleware", {"allowed_hosts": ALLOWED_HOSTS}],
    ["fastapi.middleware.gzip:GZipMiddleware", {"minimum_size": 1000, "compresslevel": 5}],
    ...
    ["path:class", {...kwargs}],
]

routers.py

Является отправной точкой для всех будущих APPs

from fasttower.routers import APIRouter

router = APIRouter(prefix="/api/v1")
router.include_router(APP_ROUTER, prefix='/app')

Создание нового приложения

Выполните команду которая создаст приложение

tower g a appexample

После ее выполнения обязательно добавьте приложение в settings.py -> INSTALLED_APPS

INSTALLED_APPS = [
    'fasttower.apps.taerich',
    'fasttower.auth',
    ...
    'appexample',
]

Каждое приложение содержит config.py, models.py, admin.py, serializers.py, routers.py и views.py

Models

Основано на tortoise, так что вы можете просто импортировать ее и работать с ней!

from fasttower.db import models


class FastTowerModel(models.Model):
    say = models.CharField(max_length=100, default="Hello World!")

Admin

Тут содержится описание моделей для админ панели

from fastapi_admin.resources import Model, Dropdown
from fasttower import admin

from appexample import models


@admin.site.app.register
class AppexampleTabMenu(Dropdown):
    label = "Appexamples"
    icon = "fas fa-bars"
    resources = []
    title = "Appexamples"

Views

Тут все аналогично FastAPI, скоро появятся mixins как в Django для простых CRUD задач!

from appexample.models import FastTowerModel

from fasttower.routers import APIRouter

router = APIRouter()


@router.get("/")
async def say():
    return await FastTowerModel().create()

Не забудьте подключить в appexample.routers, а так же в example.routers

Admin panel

Является экспериментальной функцией. В настоящее время для ее работы требуется Redis

Проверьте в settings.py

ADMIN_PANEL_REDIS = 'redis://localhost:6379/0'

А так же включите его в asgi.py

from fasttower.admin.site import app as admin_app, lifespan_admin
from fasttower.db import lifespan

app = FastTower(title="FastTower API Documentation", lifespan=lifespans([lifespan, lifespan_admin]))

app.mount('/admin', admin_app)
Полный код... ```python """ ASGI config for example project.

It exposes the ASGI callable as a module-level variable named application. """

import os

from fasttower.utils import setup, lifespans

os.environ.setdefault("FASTTOWER_SETTINGS_MODULE", "example.settings") setup()

from fasttower.server import FastTower

from example.routers import router from fasttower.admin.site import app as admin_app, lifespan_admin from fasttower.db import lifespan

app = FastTower(title="FastTower API Documentation", lifespan=lifespans([lifespan, lifespan_admin]))

app.mount('/admin', admin_app)

app.include_router(router)

</details>

### Commands
Список текущих команд и их описания вы можете получить используя команду
```bash
tower --help
 Usage: tower [OPTIONS] COMMAND [ARGS]...                                                                                                                                                                                         

╭─ Options ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --install-completion          Install completion for the current shell.                                                                                                                                                        │
│ --show-completion             Show completion for the current shell, to copy it or customize the installation.                                                                                                                 │
│ --help                        Show this message and exit.                                                                                                                                                                      │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ db          Database commands                                                                                                                                                                                                  │
│ g           Generate project structures and app components for FastTower.                                                                                                                                                      │
│ run         Запуск FastTower сервера                                                                                                                                                                                           │
│ shell       Запускает интерактивную оболочку.                                                                                                                                                                                  │
│ superuser   Create a superuser.                                                                                                                                                                                                │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

Создание новых команд

Для этого создайте файл в папке app(appexample) commands.py

import typer

example_commands = typer.Typer(name="appexample", help="Example commands")


@example_commands.command()
def hello_world():
    print("Hello World!")

Вот и все её можно запустить!

tower appexample hello-world
Hello World!

Более детально про Typer

Продолжение следует...

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fasttower-0.1.6a3.tar.gz (21.7 kB view details)

Uploaded Source

Built Distribution

fasttower-0.1.6a3-py3-none-any.whl (35.1 kB view details)

Uploaded Python 3

File details

Details for the file fasttower-0.1.6a3.tar.gz.

File metadata

  • Download URL: fasttower-0.1.6a3.tar.gz
  • Upload date:
  • Size: 21.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.12.2 Windows/11

File hashes

Hashes for fasttower-0.1.6a3.tar.gz
Algorithm Hash digest
SHA256 9664c34fc97dc4a5cba91b369866d929ebf1cf659ffcf037dd0d1a40ed932dbf
MD5 fe994fdd754fcf11fcda8d868674bb7f
BLAKE2b-256 a98746fe2b7b8912a6a1691ab455f43c956ae1b3860e789f8a2038ca14078e49

See more details on using hashes here.

File details

Details for the file fasttower-0.1.6a3-py3-none-any.whl.

File metadata

  • Download URL: fasttower-0.1.6a3-py3-none-any.whl
  • Upload date:
  • Size: 35.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.12.2 Windows/11

File hashes

Hashes for fasttower-0.1.6a3-py3-none-any.whl
Algorithm Hash digest
SHA256 7a1a1bb244aed0abe95e20a28fcf292115c6306813869562a18d8a2c91ae0dad
MD5 ec45854438b0c4bfa232232000fb1f74
BLAKE2b-256 e9592b51a375f7b735a71975f9af6b58a6c7364b0ca001049edd95903f54ddaf

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page