A Django-like but async web-framework based on FastAPI and TortoiseORM.
Project description
OhMyAPI
OhMyAPI == Application scaffolding for FastAPI+TortoiseORM.
OhMyAPI is a Django-flavored web-application scaffolding framework. Built around FastAPI and TortoiseORM, it 100% async. It is blazingly fast and has batteries included.
Features:
- Django-like project-layout and -structure
- Django-like settings.py
- Django-like models via TortoiseORM
- Django-like model.Meta class for model configuration
- Django-like advanced permissions system
- Django-like migrations (makemigrations & migrate) via Aerich
- Django-like CLI for interfacing with your projects (startproject, startapp, shell, serve, etc)
- various optional builtin apps
- highly configurable and customizable
- 100% async
Getting started
Creating a Project
pip install ohmyapi
ohmyapi startproject myproject
cd myproject
This will create the following directory structure:
myproject/
- pyproject.toml
- settings.py
Run your project with:
ohmyapi serve
In your browser go to:
Creating an App
Create a new app by:
ohmyapi startapp myapp
This will lead to the following directory structure:
myproject/
- myapp/
- __init__.py
- models.py
- routes.py
- pyproject.toml
- settings.py
Add 'myapp' to your INSTALLED_APPS in settings.py.
Write your first model in myapp/models.py:
from ohmyapi.db import Model, field
class Person(Model):
id: int = field.IntField(min=1, pk=True)
name: str = field.CharField(min_length=1, max_length=255)
username: str = field.CharField(min_length=1, max_length=255, unique=True)
age: int = field.IntField(min=0)
Next, create your endpoints in myapp/routes.py:
from fastapi import APIRouter, HTTPException
from tortoise.exceptions import DoesNotExist
from .models import Person
router = APIRouter(prefix="/myapp")
@router.get("/")
async def list():
return await Person.Schema.many.from_queryset(Person.all())
@router.get("/:id")
async def get(id: int):
try:
return await Person.Schema.one(Person.get(pk=id))
except DoesNotExist:
raise HTTPException(status_code=404, detail="item not found")
...
Migrations
Before we can run the app, we need to create and initialize the database.
Similar to Django, first run:
ohmyapi makemigrations [ <app> ] # no app means all INSTALLED_APPS
This will create a migrations/ folder in you project root.
myproject/
- myapp/
- __init__.py
- models.py
- routes.py
- migrations/
- myapp/
- pyproject.toml
- settings.py
Apply your migrations via:
ohmyapi migrate [ <app> ] # no app means all INSTALLED_APPS
Run your project:
ohmyapi serve
Shell
Similar to Django, you can attach to an interactive shell with your project already loaded inside.
ohmyapi shell
Authentication
A builtin auth app is available.
Simply add ohmyapi_auth to your INSTALLED_APPS and define a JWT_SECRET in your settings.py.
Remember to makemigrations and migrate for the auth tables to be created in the database.
settings.py:
INSTALLED_APPS = [
'ohmyapi_auth',
...
]
JWT_SECRET = "t0ps3cr3t"
Create a super-user:
ohmyapi createsuperuser
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ohmyapi-0.1.3.tar.gz.
File metadata
- Download URL: ohmyapi-0.1.3.tar.gz
- Upload date:
- Size: 11.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.0 CPython/3.13.7 Linux/6.16.8-zen3-1-zen
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c79d3f4403eecfea588bc64f139f97b25f4e705a63fcf88f564bbb96927574ce
|
|
| MD5 |
9b822fc81f634cd1fcbb7fdbdf50330f
|
|
| BLAKE2b-256 |
2df5ad782c316eef8aa467a923569101c081051c70c3ce77e0760fff7d32d3b3
|
File details
Details for the file ohmyapi-0.1.3-py3-none-any.whl.
File metadata
- Download URL: ohmyapi-0.1.3-py3-none-any.whl
- Upload date:
- Size: 15.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.0 CPython/3.13.7 Linux/6.16.8-zen3-1-zen
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
23f5180b3e8c1c00b0a21d9670a5ac863f287d841db8698f8cc5d7de984fc8d9
|
|
| MD5 |
770e254d747320fd7abc0c6a99eac54f
|
|
| BLAKE2b-256 |
89872c0591ff495403e2580ebf335c82063adf713cbaa5f3b73ba846495e5b29
|