A Production Based FastAPI-MongoDB Template

I have used Beanie ODM for MongoDB database model with FastAPI.

If the repo is helpful for you, please give a star and fork it.

Click here to download/fork the repository

Features:

  • FastAPI project structure tree
  • user module
    • id, first name, last name, email as username, password, role, is_active created_at, updated_at
  • RBAC implementation
  • authentication => JWT
  • middleware
  • three types of server
    • production, development, test
  • UUID as primary key

User module's API

SRL METHOD ROUTE FUNCTIONALITY Fields Access
1 POST /login Login user email, password All User
2 POST /refresh/?refresh_token= Refresh access token None All User
3 POST /users/ Create new user email, password, first name, last name Anyone
4 GET /users/ Get all users list email, password, first name, last name, role, is_active, created_at, updated_at, id Admin
5 GET /users/me/ Get current user details email, password, first name, last name, role, is_active, created_at, updated_at, id Any User
6 GET /users/{user_id} Get indivisual users details email, password, first name, last name, role, is_active, created_at, updated_at, id Any User
7 PATCH /users/{user_id} Update the user partially email, password, is_active, role Admin
8 DELETE /users/{user_id} Delete the user None Admin

Project Structure

├── app
│   ├── api
│   │   ├── endpoints   # Contains modules for each feature (user, product, payments).
│   │   │   ├── __init__.py
│   │   │   └── user
│   │   │       ├── auth.py
│   │   │       ├── functions.py
│   │   │       ├── __init__.py
│   │   │       └── user.py
│   │   ├── __init__.py
│   │   └── routers     # Contains FastAPI routers, where each router corresponds to a feature.
│   │       ├── api.py
│   │       ├── __init__.py
│   │       └── user.py
│   ├── core    # Contains core functionality like database management, dependencies, etc. 
│   │   ├── database.py
│   │   ├── dependencies.py
│   │   ├── __init__.py
│   │   └── settings.py
│   ├── __init__.py
│   ├── main.py     # Initializes the FastAPI app and brings together various components.
│   ├── models      # Contains modules defining database models for users, products, payments, etc.
│   │   ├── common.py
│   │   ├── __init__.py
│   │   └── user.py
│   ├── schemas    # Pydantic model for data validation
│   │   ├── __init__.py
│   │   └── user.py
│   └── utils       # Can include utility functions that are used across different features.
├── requirements.txt # Lists project dependencies.

app/api/endpoints/: Contains modules for each feature (user, product, payments).

app/api/routers/: Contains FastAPI routers, where each router corresponds to a feature.

app/models/: Contains modules defining database models for users, products, payments, etc.

app/core/: Contains core functionality like database management, dependencies, etc.

app/utils/: Can include utility functions that are used across different features.

app/main.py: Initializes the FastAPI app and brings together various components.

tests/: Houses your test cases.

docs/: Holds documentation files.

scripts/: Contains utility scripts.

requirements.txt: Lists project dependencies.

Setup

  1. The first thing to do is to clone the repository:
$ https://github.com/MahmudJewel/FastAPI-MongoDB-Template
  1. Create a virtual environment to install dependencies in and activate it:
$ cd fastapi-booking-module
$ python -m venv venv
$ source venv/bin/activate
  1. Then install the dependencies:
# for fixed version
(venv)$ pip install -r requirements.txt

Note the (venv) in front of the prompt. This indicates that this terminal session operates in a virtual environment set up by venv.

  1. Now rename .env.example to .env and give the information on the .env file.
  2. Then Run the project
(venv)$ uvicorn app.main:app --reload

Tools

Back-end

Language:

Python

Frameworks:

FastAPI
pydantic

Other libraries / tools:

beanie (MongoDB)
motor
starlette
uvicorn
python-jose
python-dotenv
google-auth

Happy Coding