FastAPI Guide
Designing your API
See:
Using FastAPI to Build Python Web APIs
Full Stack FastAPI and PostgreSQL - Base Project Generator
Up and running with fastapi series
See:
Handle Registration in FastAPI and Tortoise ORM
Handling Email Confirmation During Registration in Flask
Flask Rest API -Part:5- Password Reset
E-commerce API with FastAPI | Sending Verification Emails | FastAPI-Mail
It simply allows you to order your arguments so those without default values can be placed ahead of those that can. It also ensures that
keyword arguments are used everywhere (which may or may not be desirable when refactoring code). I usually find it unnecessary except in places where I’m using
BackgroundTasks
or a depency injected argument somewhere, for example:
@app.get("/")
def get_username(*, db: Session = Depends(get_db), user_id: int) -> str:
return db.query(User).get(user_id).username
See:
What does a star(*) mean in a method parameter?
Order the parameters as you need, tricks
Working with Pydantic objects
MyModel(**my_model_from.dict())
Dockerizing a FastAPI application
See:
How to Dockerize a Python App with FastAPI
An Extremely Simple Docker, Traefik, and Python FastAPI Example
Dealing with common errors
It usually means the body of your request doesn’t mesh with what your API method is expected. Make sure that the object your passing in matches what you’ve
specified, including using the Body(...[,embed=True])
types correctly
See:
Body - Multiple Parameters
Python: FastApi (Unprocessable Entity) error
Usually means you are missing “await” from async method (fastapi/python)
RETURNING
statements work okay with fetch_one
/fetch_all
. If you are using execute
, it won’t work
See: Support for RETURNING
Mixed Content: The page at 'https://page.com' was loaded over HTTPS, but requested an insecure
XMLHttpRequest endpoint 'http://page.com?filter=xxxx'.
This request has been blocked; the content must be served over HTTPS.
If you add a trailing slash (/) in your API requests it will fix the problem BUT a much easier solution is to the correct proxy headers for Uvicorn. They should look something like this:
upstream api_server {
server ${API_HOST}:${API_PORT} fail_timeout=0;
}
...
server {
...
location ~ /api/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_pass http://api_server;
}
See the following resources:
Failure to load any static files when deploying with HTTPS
fastapi-react nginx.conf
Add option for adding a trailing slash automatically
Ajax Product Filter does not work in https - Fixed