A Django-like framework built on FastAPI
Project description
FastTower
FastTower — это молодой фреймворк основанный на FastAPI для быстрого создания серверных приложений с Django-like структурой.
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9664c34fc97dc4a5cba91b369866d929ebf1cf659ffcf037dd0d1a40ed932dbf |
|
MD5 | fe994fdd754fcf11fcda8d868674bb7f |
|
BLAKE2b-256 | a98746fe2b7b8912a6a1691ab455f43c956ae1b3860e789f8a2038ca14078e49 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7a1a1bb244aed0abe95e20a28fcf292115c6306813869562a18d8a2c91ae0dad |
|
MD5 | ec45854438b0c4bfa232232000fb1f74 |
|
BLAKE2b-256 | e9592b51a375f7b735a71975f9af6b58a6c7364b0ca001049edd95903f54ddaf |