A collection of Django and DRF utilities to simplify API development.
Project description
🛠️ djresttoolkit (django rest toolkit)
djresttoolkit is a collection of utilities and helpers for Django and Django REST Framework (DRF) that simplify common development tasks such as API handling, authentication, and email sending and much more.
✨ Features
- Django REST Framework helpers (serializers, views, pagination, etc.)
- Django utilities (e.g., email sending, model mixins)
- Ready-to-use shortcuts to speed up API development
- Lightweight, no unnecessary dependencies
- Type Safe - written with modern Python type hints.
📦 Installation
-
By using uv:
uv add djresttoolkit
-
By using pip:
pip install djresttoolkit
📚 API Reference
1. EmailSender
from djresttoolkit.mail import EmailSender, EmailContent, EmailTemplate
EmailSender
Send templated emails.
Init
EmailSender(email_content: EmailContent | EmailContentDict)
Methods
send(to: list[str], exceptions: bool = False) -> bool
to: recipient emailsexceptions: raise on error ifTrue, else logs error- Returns
Trueif sent,Falseon failure
Example
content = EmailContent(
subject="Hello",
from_email="noreply@example.com",
context={"username": "Alice"},
template=EmailTemplate(
text="emails/welcome.txt",
html="emails/welcome.html"
)
)
EmailSender(content).send(to=["user@example.com"])
EmailContent
subject,from_email,context,template(EmailTemplate)
EmailTemplate
text,html— template file paths
2. Custom DRF Exception Handler
from djresttoolkit.views import exception_handler
exception_handler(exc: Exception, context: dict[str, Any]) -> Response | None
A DRF exception handler that:
- Preserves DRF’s default exception behavior.
- Adds throttling support (defaults to
AnonRateThrottle). - Returns 429 Too Many Requests with
retry_afterif throttle limit is exceeded.
Parameters
exc: Exception object.context: DRF context dictionary containing"request"and"view".
Returns
Response— DRF Response object (with throttling info if applicable), orNone.
Settings Configuration
In settings.py:
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'djresttoolkit.views.exception_handler',
# Other DRF settings...
}
Throttle Behavior
- Uses
view.throttle_classesif defined, else defaults toAnonRateThrottle. - Tracks requests in cache and calculates
retry_after. - Cleans expired timestamps automatically.
3. Response Time Middleware
from djresttoolkit.middlewares import ResponseTimeMiddleware
ResponseTimeMiddleware
Middleware to calculate and log HTTP response time for each request.
Constructor from ResponseTimeMiddleware
ResponseTimeMiddleware(get_response: Callable[[HttpRequest], HttpResponse])
get_response: The next middleware or view callable.
Usage
Add it to your Django MIDDLEWARE in settings.py:
MIDDLEWARE = [
# Other middlewares...
'djresttoolkit.middlewares.ResponseTimeMiddleware',
]
Behavior
- Measures the time taken to process each request.
- Adds a header
X-Response-Timeto each HTTP response. - Logs the response time using Django's logging system.
The response headers will include
X-Response-Time: 0.01234 seconds
Logs a message
INFO: Request processed in 0.01234 seconds
4. Throttle Utilities
ThrottleInfoJSONRenderer
from djresttoolkit.renderers import ThrottleInfoJSONRenderer
A custom DRF JSON renderer that automatically attaches throttle information to response headers.
Usage (settings.py)
REST_FRAMEWORK = {
"DEFAULT_RENDERER_CLASSES": [
"djresttoolkit.renderers.ThrottleInfoJSONRenderer",
"rest_framework.renderers.BrowsableAPIRenderer",
],
}
When enabled, every response includes throttle headers like:
X-Throttle-User-Limit: 100
X-Throttle-User-Remaining: 98
X-Throttle-User-Reset: 2025-08-18T07:30:00Z
X-Throttle-User-Retry-After: 0
ThrottleInspector
from djresttoolkit.throttling import ThrottleInspector
Utility class to inspect DRF throttle usage for a view or request.
Constructor for ThrottleInspector
ThrottleInspector(
view: APIView,
request: Request | None = None,
throttle_classes: list[type[BaseThrottle]] | None = None,
)
Key Methods
-
get_details() -> dict[str, Any]Returns structured throttle info: limit, remaining, reset time, retry_after. -
attach_headers(response: Response, throttle_info: dict | None)Attaches throttle data to HTTP headers.
🛠️ Planned Features
- Add more utils
🤝 Contributing
Contributions are welcome! Please open an issue or PR for any improvements.
📜 License
MIT License — See LICENSE.
👤 Author
For questions or assistance, contact Shailesh at shaileshpandit141@gmail.com.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file djresttoolkit-0.5.0.tar.gz.
File metadata
- Download URL: djresttoolkit-0.5.0.tar.gz
- Upload date:
- Size: 10.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
924048fab51bf6b7741857fde53b511a8ebf034cc9959213da4bd1cee64e3e8a
|
|
| MD5 |
745869967fa310b6da1729c3fde7f051
|
|
| BLAKE2b-256 |
46051acdbde1165791da0582c0e2d9d4949423a07ee0ce346fd63f88f5140706
|
File details
Details for the file djresttoolkit-0.5.0-py3-none-any.whl.
File metadata
- Download URL: djresttoolkit-0.5.0-py3-none-any.whl
- Upload date:
- Size: 19.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
92e067ef463b874879babbf2724e568b25876617a995c5077b857da2f355cfdb
|
|
| MD5 |
7fc92d7330ce24fa50e8aabf1a4b143f
|
|
| BLAKE2b-256 |
652bed6c01a84a4dd7244aa8fa60bfa56b729b65d61d24f7dc72b231258d1e48
|