Easily generate a template for your FastAPI applications, complete with JWT authentication and Google sign-in.
You can install Fast Template via pip
:
pip install fast-template-python
Or using poetry
:
poetry add fast-template-python
To initialize a project in an existing folder:
fast-template init project_name .
To create a new project:
fast-template init project_name
Once the template is set up, you'll need to create a .env
file as required by the settings.py
file (feel free to modify it to suit your needs).
An example of a .env
is:
POSTGRES_URL = postgresql+asyncpg://postgres@localhost/your_db_name
ACCESS_TOKEN_SECRET = Your-Access-Token-Secret
REFRESH_TOKEN_SECRET = Your-Refresh-Token-Secret
RESET_PASSWORD_SECRET = Your-Reset-Password-Secret
SECRET_KEY = Your-Secret-Key
JWT_ALGORITHM = HS256
MAIL_USERNAME = yourname@yourmail.com
MAIL_FROM_NAME = Your-Name
MAIL_PASSWORD = yourmailpassword
MAIL_FROM = yourname@yourmail.com
MAIL_PORT = 000 # 587 for gmail
MAIL_SERVER = your_mail_server # smtp.gmail.com for gmail
REDIS_HOST = localhost
REDIS_PORT = 6379
GOOGLE_CLIENT_ID = YOUR_GOOGLE_CLIENT_ID
GOOGLE_CLIENT_SECRET = YOUR_GOOGLE_CLIENT_SECRET
GOOGLE_REDIRECT_URI = https://yourdomain.com/auth/google/callback
You can set up database migrations using Alembic:
alembic init —template async migrations
For more information on using Alembic, check the official tutorial.
- JWT-based authentication is built-in.
- Google sign-in is fully integrated, right down to the database layer.
The folder structure is designed to be modular and scalable, inspired by Philip Okiokio (LinkedIn, GitHub). It promotes loose coupling and clean separation of concerns.
Each operation is handled by three main layers:
- Router Layer: Defines FastAPI routes.
- Service Layer: Contains the business logic.
- Database Layer: Manages database interactions.
The data flow is structured as follows:
Router Layer → Service Layer → Database Layer
The service layer handles the data exchange between the router and the database, while the router serializes requests and passes them to the service.
The folder structure on running
fast-template init totrac
is
TOTRAC
├── database
│ ├── db_handlers
│ │ ├── __init__.py
│ │ ├── auth_db_handler.py
│ ├── orms
│ │ ├── __init__.py
│ │ ├── auth_orm.py
├── job_manager
│ ├── email
│ │ ├── mailer.py
│ ├── job_runner.py
├── root
│ ├── templates
│ │ ├── auth
│ │ │ ├── info_email_template.html
│ ├── utils
│ │ ├── abstract_base.py
│ │ ├── base_models_abstract.py
│ ├── app_routers.py
│ ├── app.py
│ ├── arq_worker.py
│ ├── constants.py
│ ├── database.py
│ ├── logging.py
│ ├── redis_manager.py
│ ├── settings.py
├── routers
│ ├── __init__.py
│ ├── auth_router.py
│ ├── miscellaneous_router.py
├── schemas
│ ├── __init__.py
│ ├── auth_schemas.py
│ ├── error_messages_schema.py
│ ├── file_upload_schema.py
│ ├── response_info_schema.py
├── services
│ ├── utils
│ │ ├── auth_utils.py
│ │ ├── exceptions.py
│ │ ├── file_downloader.py
│ │ ├── file_uploader_utils.py
│ │ ├── google_auth_utils.py
│ │ ├── token_utils.py
│ ├── auth_services.py
│ ├── miscellaneous_services.py
├── venv
├── __init__.py
├── .gitignore
├── make_db_migrations.py
├── Makefile
├── pyproject.toml
├── Readme.md
├── requirements.txt
The root folder contains core services required for the backend, including:
- Database setup
- Redis caching
- Email templates
- Background workers (using ARQ)
- Logging configuration
- Application settings
- Schema: Pydantic models for serialization/deserialization, organized by feature (e.g., authentication schemas are in the
auth
folder). - Database: Handlers and ORM integration using SQLAlchemy.
This package is a work in progress, created to streamline the setup of backend projects.
Contributions are welcome! Feel free to open a pull request or an issue for feature requests or bug reports.