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.6a4.tar.gz (21.7 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: fasttower-0.1.6a4.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.6a4.tar.gz
Algorithm Hash digest
SHA256 da19655a6e063f200420c20b9a4db00795ca0bbf73434926f6e93c4f9d6ac34a
MD5 78bb75d6550a19e2f0ad9669b8b6b23b
BLAKE2b-256 57a66af1e9339ff2b87649cd6de918f7d744a36d7975f71a3c1fe16e13ec47f8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fasttower-0.1.6a4-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.6a4-py3-none-any.whl
Algorithm Hash digest
SHA256 97d360bfe84044dfdd7411a3fe331a4e5bffd9b2ed252f9c751f0bb12e834004
MD5 93d93c4b80096c42de3ce90f12ed4a1a
BLAKE2b-256 be8332fe28f69bf014c6e7a2f4363b4bb70c64103ad3a7da407cfe6cf6df6360

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