Skip to main content

A Django-like framework built on FastAPI

Project description

FastTower

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

Features

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

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

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

Полный пример... на [github](https://github.com/pysashapy/fasttower/examples/start)

Установка

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

Uploaded Source

Built Distribution

fasttower-0.1.6a1-py3-none-any.whl (34.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fasttower-0.1.6a1.tar.gz
  • Upload date:
  • Size: 21.4 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.6a1.tar.gz
Algorithm Hash digest
SHA256 39df9f30df2eb3a7f0f6d6c52ee4a7eac42c44132c02475a515e06e637802202
MD5 eb6412f628a5b21f972ae8ce89485d20
BLAKE2b-256 8b2a1fcb02a3feffc091755ffd119b360a3cbf085b15abec5bc0f20982e42dac

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fasttower-0.1.6a1-py3-none-any.whl
  • Upload date:
  • Size: 34.7 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.6a1-py3-none-any.whl
Algorithm Hash digest
SHA256 5b20323b7d1f07eb91d0048467f319cbf3d7be7e5dc8cc176f9f4a7e07f6aeff
MD5 38cdb76170ff18fe9b056736c409ec79
BLAKE2b-256 4b446d69e78836b426cf815a80bbd1fc41ff2dc70c9d652e132df6d7f8d1e650

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