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
Или другим сервером... ```console uvicorn example.asgi:app ```

Обзор

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

Запуск с установленной env... ```console 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 не будет доступа к моделям и командам приложения

INSTALLED_APPS = [
    'fasttower.apps.taerich',
    'fasttower.auth',
    ...
    'appexample',
]
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) ```

Commands

Список текущих команд и их описания вы можете получить используя команду

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

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: fasttower-0.1.6.tar.gz
  • Upload date:
  • Size: 23.1 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.6.tar.gz
Algorithm Hash digest
SHA256 0d5116bd8cc59ec74cef5394274ca20dabc44247a55109d6ee41b9b48a12ff6f
MD5 641715a48b8dce22f973e740a9429df3
BLAKE2b-256 3b859fcad6f255ea7fc30e4ca26e48868588308543f2132b4f380defcfed4d62

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fasttower-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 37.9 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.6-py3-none-any.whl
Algorithm Hash digest
SHA256 70c877bbcf9760fc7e0f2497ce7de9b5e1ba32bdb5a4c2164b6f982148221a6d
MD5 b8a13622491cd144d788989568e38dae
BLAKE2b-256 d0bfd4d66078d5efa9f0066d1ed15838a1325657f3af2f6bbd249da41ead2b32

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