starlette_web brings a number of features atop base starlette.
- Active Record ORM (via SQLAlchemy.ORM)
- Caches
- Pub-sub channels (based on
encode/broadcaster
) - File storages
- Email senders
- Management commands
- Base HTTP and WebSocket endpoints
- Authentication backend and permission classes
(based on
djangorestframework
) - Extended support for OpenAPI
- Utilities
- Redis support
- MQTT experimental support
- Authorization (based on
django.contrib.auth
) - Admin panel (via starlette_admin)
- Constance (based on
django-constance
) - Periodic task scheduler (based on
django-crontab
), that uses OS native scheduling mechanism (POSIX crontab, Windows Task Scheduler 2.0). For additional scheduling schemes, please see docs.
- See github issues/milestones for planned features: https://github.com/dolamroth/starlette-web/milestones
- FileField, ImageField (see docs/notes for explanation)
- Asynchronous shell (difficult to implement and to use with lots of async context managers, goes against structured concurrency)
- Composite primary keys for databases are not supported by most contrib modules,
including
starlette_admin
orsqlalchemy_mptt
, so restrain from using those. - Framework is not thread-safe in general. It is supposed to be run in a single thread. Some modules, such as redis, are instantiated with fixed event loop in main thread. Allowed operations to run in threads are: file I/O, tests.
- docs/notes section contains various notes and best practices
- See blog of Nathaniel Smith for articles about structured concurrency: https://vorpus.org/blog/archives.html
- See GINO docs for articles about asynchronous programming, and asynchronous ORM
- Project wiki also has an unsorted bunch of articles/discussions on various topics