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

Uploaded Source

Built Distribution

fasttower-0.1.6a2-py3-none-any.whl (35.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fasttower-0.1.6a2.tar.gz
  • Upload date:
  • Size: 21.6 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.6a2.tar.gz
Algorithm Hash digest
SHA256 914ed9abd2e43ec86b698ff5c7dc113e0d8aa7b689d85377450d637fd6696191
MD5 86e744a72c4d1c316c186776bc0981cf
BLAKE2b-256 1ee8fac22a40fb8fbd60bbf3f7d7b735fbec1a897a15e054970c5fb4e86d8f43

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fasttower-0.1.6a2-py3-none-any.whl
  • Upload date:
  • Size: 35.0 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.6a2-py3-none-any.whl
Algorithm Hash digest
SHA256 5dacd858f5694bfb24445dcc6f3fc90bcde7d6df24886a9885d6f2a9ca8ef2c6
MD5 fbd7d6d8a1a18063d6cfb4ea633f1d7e
BLAKE2b-256 0d69304369f70f5177232f4168152bf5a90041fe9edb909a41f0d24d3b725ff1

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