All Projects → teamhide → fastapi-boilerplate

teamhide / fastapi-boilerplate

Licence: other
FastAPI boilerplate for real world production

Programming Languages

python
139335 projects - #7 most used programming language
Dockerfile
14818 projects
Mako
254 projects
shell
77523 projects

Projects that are alternatives of or similar to fastapi-boilerplate

fastapi-starter
A FastAPI based low code starter: Async SQLAlchemy, Postgres, React-Admin, pytest and cypress
Stars: ✭ 97 (-33.1%)
Mutual labels:  sqlalchemy, fastapi, fastapi-template, fastapi-boilerplate
tifa
Yet another opinionated fastapi-start-kit with best practice
Stars: ✭ 82 (-43.45%)
Mutual labels:  sqlalchemy, fastapi, fastapi-template
fastapi-sqlalchemy-1.4-async
https://rogulski.it/blog/sqlalchemy-14-async-orm-with-fastapi/
Stars: ✭ 17 (-88.28%)
Mutual labels:  sqlalchemy, asyncio, fastapi
fastapi-uvicorn-gunicorn-nginx-supervisor-boilerplate
Production ready boilerplate to start with Fastapi
Stars: ✭ 17 (-88.28%)
Mutual labels:  fastapi, fastapi-template, fastapi-boilerplate
FRDP
Boilerplate code for quick docker implementation of REST API with JWT Authentication using FastAPI, PostgreSQL and PgAdmin ⭐
Stars: ✭ 55 (-62.07%)
Mutual labels:  sqlalchemy, fastapi, fastapi-boilerplate
fastapi-mvc
Developer productivity tool for making high-quality FastAPI production-ready APIs.
Stars: ✭ 131 (-9.66%)
Mutual labels:  fastapi, fastapi-template, fastapi-boilerplate
fastapi-pydiator
Python clean architecture and usecase implementation with fastapi and pydiator-core
Stars: ✭ 58 (-60%)
Mutual labels:  fastapi, fastapi-template, fastapi-boilerplate
fast-api-sqlalchemy-template
Dockerized web application on FastAPI, sqlalchemy1.4, PostgreSQL
Stars: ✭ 25 (-82.76%)
Mutual labels:  sqlalchemy, asyncio, fastapi
FastAPI Tortoise template
FastAPI - Tortoise ORM - Celery - Docker template
Stars: ✭ 144 (-0.69%)
Mutual labels:  fastapi, fastapi-template, fastapi-boilerplate
FastAPI-template
Feature rich robust FastAPI template.
Stars: ✭ 660 (+355.17%)
Mutual labels:  fastapi, fastapi-template, fastapi-boilerplate
fastapi-etag
Convenience library for working with etags in fastapi
Stars: ✭ 19 (-86.9%)
Mutual labels:  asyncio, fastapi
ChefAPI
API using FastAPI and PostgreSQL for sharing or keeping track of awesome food recipes Based on Oauth2 and JWT 💎
Stars: ✭ 16 (-88.97%)
Mutual labels:  sqlalchemy, fastapi
fastapi-azure-auth
Easy and secure implementation of Azure AD for your FastAPI APIs 🔒 B2C, single- and multi-tenant support.
Stars: ✭ 174 (+20%)
Mutual labels:  asyncio, fastapi
cloudrun-fastapi
FastAPI on Google Cloud Run
Stars: ✭ 112 (-22.76%)
Mutual labels:  sqlalchemy, fastapi
Apollo
A basic Application with multiple functionalities built with FastAPI aim to help Users Buy New Items Provided using PaypalAPI 🚀
Stars: ✭ 22 (-84.83%)
Mutual labels:  sqlalchemy, fastapi
fastapi-saas-base
Fast API SAAS Base App
Stars: ✭ 47 (-67.59%)
Mutual labels:  sqlalchemy, fastapi
favv
Fullstack Web Application Framework With FastAPI + Vite + VueJS. Streamlit for rapid development.
Stars: ✭ 17 (-88.28%)
Mutual labels:  sqlalchemy, fastapi
FastAPI-Full-Stack-Samples
The API Application Development using Python FastAPI, including interactive API documentation
Stars: ✭ 61 (-57.93%)
Mutual labels:  sqlalchemy, fastapi
dvhb-hybrid
A package to mix django and asyncio in one application
Stars: ✭ 45 (-68.97%)
Mutual labels:  sqlalchemy, asyncio
FinanceCenter
Fetching Financial Data (US/China)
Stars: ✭ 26 (-82.07%)
Mutual labels:  sqlalchemy, asyncio

FastAPI Boilerplate

Features

  • Async SQLAlchemy session
  • Custom user class
  • Top-level dependency
  • Dependencies for specific permissions
  • Celery
  • Dockerize(Hot reload)
  • Event dispatcher
  • Cache

SQLAlchemy for asyncio context

from core.db import Transactional, session


@Transactional()
async def create_user(self):
    session.add(User(email="[email protected]"))

Do not use explicit commit(). Transactional class automatically do.

Standalone session

According to the current settings, the session is set through middleware.

However, it doesn't go through middleware in tests or background tasks.

So you need to use the @create_session decorator.

from core.db import create_session


@create_session
def test_something():
    ...

Custom user for authentication

from fastapi import Request


@home_router.get("/")
def home(request: Request):
    return request.user.id

Note. you have to pass jwt token via header like Authorization: Bearer 1234

Custom user class automatically decodes header token and store user information into request.user

If you want to modify custom user class, you have to update below files.

  1. core/fastapi/schemas/current_user.py
  2. core/fastapi/middlewares/authentication.py

CurrentUser

class CurrentUser(BaseModel):
    id: int = None

Simply add more fields based on your needs.

AuthBackend

current_user = CurrentUser()

After line 18, assign values that you added on CurrentUser.

Top-level dependency

Note. Available from version 0.62 or higher.

Set a callable function when initialize FastAPI() app through dependencies argument.

Refer Logging class inside of core/fastapi/dependencies/logging.py

Dependencies for specific permissions

Permissions IsAdmin and IsAuthenticated have already been implemented.

from core.fastapi.dependencies import (
    PermissionDependency,
    IsAdmin,
)


user_router = APIRouter()


@user_router.get(
    "",
    response_model=List[GetUserListResponseSchema],
    response_model_exclude={"id"},
    responses={"400": {"model": ExceptionResponseSchema}},
    dependencies=[Depends(PermissionDependency([IsAdmin]))],  # HERE
)
async def get_user_list(limit: int = 10, prev: int = None):
    pass

Insert permission through dependencies argument.

If you want to make your own permission, inherit BasePermission and implement has_permission() function.

Event dispatcher

Refer the README of https://github.com/teamhide/fastapi-event

Cache

from core.helpers.cache import Cacheable


@Cacheable(prefix="get_user", ttl=60)
async def get_user():
    ...

Use the Cacheable decorator to cache the return value of a function.

Depending on the argument of the function, caching is stored with a different value through internal processing.

Custom Key builder

from core.helpers.cache.base import BaseKeyMaker


class CustomKeyMaker(BaseKeyMaker):
    async def make(self, function: Callable) -> str:
        ...

If you want to create a custom key, inherit the BaseKeyMaker class and implement the make() method.

@Cacheable(prefix="get_user", ttl=60, key_maker=CustomKeyMaker)

And pass your class via key_maker arguments.

If no value is given to the key_maker argument, the function implemented by default is used.

Custom Backend

from core.helpers.cache.base import BaseBackend


class RedisBackend(BaseBackend):
    async def get(self, key: str) -> Any:
        ...

    async def save(self, response: Any, key: str) -> None:
        ...

If you want to create a custom key, inherit the BaseBackend class and implement the get() and save() method.

@Cacheable(prefix="get_user", ttl=60, backend=RedisBackend)

And pass your class via backend arguments.

If no value is given to the backend argument, the function implemented by default is used.

Set default backend/keymaker

Cacheable.init_backend(backend=RedisBackend)
Cacheable.init_key_maker(backend=CustomKeyMaker)

Add the above line when the server is startup.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].