* ✨ Re-export main features used from Starlette to simplify developer's code * ♻️ Refactor Starlette exports * ♻️ Refactor tutorial examples to use re-exported utils from Starlette * 📝 Add examples for all middlewares * 📝 Add new docs for middlewares * 📝 Add examples for custom responses * 📝 Extend docs for custom responses * 📝 Update docs and add notes explaining re-exports from Starlette everywhere * 🍱 Update screenshot for HTTP status * 🔧 Update MkDocs config with new content * ♻️ Refactor tests to use re-exported utils from Starlette * ✨ Re-export WebSocketDisconnect from Starlette for tests * ✅ Add extra tests for extra re-exported middleware * ✅ Add tests for re-exported responses from Starlette * ✨ Add docs about mounting WSGI apps * ➕ Add Flask as a dependency to test WSGIMiddleware * ✅ Test WSGIMiddleware example
1.7 KiB
You can serve static files automatically from a directory using StaticFiles.
Install aiofiles
First you need to install aiofiles:
pip install aiofiles
Use StaticFiles
- Import
StaticFiles. - "Mount" a
StaticFiles()instance in a specific path.
{!./src/static_files/tutorial001.py!}
!!! note "Technical Details"
You could also use from starlette.staticfiles import StaticFiles.
**FastAPI** provides the same `starlette.staticfiles` as `fastapi.staticfiles` just as a convenience for you, the developer. But it actually comes directly from Starlette.
What is "Mounting"
"Mounting" means adding a complete "independent" application in a specific path, that then takes care of handling all the sub-paths.
This is different from using an APIRouter as a mounted application is completely independent. The OpenAPI and docs from your main application won't include anything from the mounted application, etc.
You can read more about this in the Advanced User Guide.
Details
The first "/static" refers to the sub-path this "sub-application" will be "mounted" on. So, any path that starts with "/static" will be handled by it.
The directory="static" refers to the name of the directory that contains your static files.
The name="static" gives it a name that can be used internally by FastAPI.
All these parameters can be different than "static", adjust them with the needs and specific details of your own application.
More info
For more details and options check Starlette's docs about Static Files.