Welcome to the quickstart tool for creating a FastAPI project with the following stack:
The default pip packages installed include:
fastapiuvicorn[standard]sqlalchemyjinja2python-dotenvpoetry
Note: all libraries and packages are automatically installed to their latest versions when running the tool.
Creating a project from scratch can be a tedious process. So, I wanted to simplify it! This tool is ideal for those that are looking to quickly prototype a project without worrying about JavaScript frameworks, such as Backend Developers and ML Engineers.
The tool does the following:
- Creates a virtual environment in the project folder
- Accesses it, updates
PIPand installs the required packages - Creates a
.envfile - Creates a
backenddirectory with a basic application template forFastAPI - Creates a
frontenddirectory with some basicJinja2template files- Such as a
_base.htmlandindex.html
- Such as a
- Creates a
frontend/publicfiles directory for storingcss,js, andimgfiles locally- Adds
TailwindCSS,Flowbite,HTMX, andAlpineJSstatic files
- Adds
- Performs some file cleanup such as removing
node_modules(if your OS supports TailwindCSS standalone CLI),venvandpackage.jsonfiles
The tool is intended to be dynamic and aims to install the most recent packages where possible. To do this, we require NodeJS, NPM and Python to be installed on your local machine, with the latest stable versions.
We use node_modules and PIP to maintain the latest versions of the core stack, and remove the node_modules after creation to simplify the project folder.
Fortunately, Tailwind has a Standalone CLI that allows us to watch and minify files without needing NodeJS!
All files added to the project are stored in setup_assets. If you want add files, feel free but it is recommended not to mess with the file structure. Here a few things to note:
- All the files are added to the
projectroot directory - Static files MUST be stored in a
setup_assets/frontend/staticfolder - The static folder name is changed dynamically during project creation from
frontend/static->frontend/public
For configuration customisation go to config.py in the root directory. Here you have three options:
- Changing the database URL ->
DATABASE_URL, defaults to a SQLite local database. - Adding additional PIP packages to the project ->
ADDITIONAL_PIP_PACKAGES - Adding additional
.envfile variables ->ENV_FILE_ADDITIONAL_PARAMS
Note: the last two options are treated as python list objects that accept strings only.
- To get started, clone the repository, enter the folder and run
createwith aname(e.g.,my_project) argument inside apoetry shell. This creates a new project inside theparentdirectory of thefastapi-quickstartdirectory:
git clone https://github.com/Achronus/fastapi-quickstart.git
cd fastapi-quickstart
poetry shell
create my_project # Replace me with custom name!For example, if you have a parent folder called projects and are making a project called todo_app the project is created in projects/todo_app instead of projects/fastapi-quickstart/todo_app.
Everything is setup with a blank template ready to start building a project from scratch. Run the following commands to run the docker development server and watch TailwindCSS locally!
Not got Docker? Follow these instructions from the Docker website.
cd ../my_project # Replace me with custom name!
docker-compose up -d --build dev
poetry shell
poetry install
watchThen access the site at localhost:8080.
Docker also comes configured with a production variant. Inside the my_project folder run:
docker-compose up -d --build prodThen you are good to go!
The newly created project should look similar to the following:
project_name
└── config
| └── docker
| | └── Dockerfile.backend
└── project_name
| └── backend
| | └── database
| | └── __init__.py
| | └── crud.py
| | └── models.py
| | └── schemas.py
| └── frontend
| | └── public
| | | └── css
| | | | └── flowbite.min.css
| | | | └── input.css
| | | | └── style.min.css
| | | └── imgs
| | | | └── avatar.svg
| | | └── js
| | | └── alpine.min.js
| | | └── flowbite.min.js
| | | └── htmx.min.js
| | | └── theme-toggle.js
| | └── templates
| | └── components
| | | └── navbar.html
| | └── _base.html
| | └── index.html
| └── tests
| | └── __init__.py
| └── .env
| └── .gitignore
| └── build.py
| └── main.py
| └── tailwind.config.js
| └── tailwindcss OR tailwindcss.exe
└── .dockerignore
└── database.db
└── docker-compose.base.yml
└── docker-compose.yml
└── poetry.lock
└── pyproject.toml
└── README.md