Real-time collaborative editing for Django admin with WebSockets
Project description
Django Admin Collaborator
A Django application that enables real-time collaborative editing in the Django admin interface. This package allows multiple admin users to work together while preventing concurrent edits to the same object.
Features
- ✨ Real-time Collaborative Editing - One user can edit while others view in real-time, preventing conflicts
- 🔒 Edit Lock Management - Prevents concurrent edits to the same object
- 👥 User Presence Detection - See who else is viewing the same object
- 🔔 Editor Attention System - Request attention from the current editor
- 💬 Real-time Chat - Chat with other users viewing the same page
- 🗣️ Individual Conversations - Open separate chat windows for each user
- 👤 Avatar Support - Visual user identification with customizable avatars
- 🔌 Redis Integration - Reliable lock management and message distribution
- 🔄 Django Channels - WebSocket-based real-time communication
Overview
Requirements
- Django 3.2+
- Django Channels 3.0+
- Redis server
- Python 3.8+
Installation
- Install the package using pip:
pip install django-admin-collaborator
- Add 'django_admin_collaborator' to your INSTALLED_APPS in settings.py:
INSTALLED_APPS = [
...
'channels',
'django_admin_collaborator',
...
]
- Configure your Django Channels layer in settings.py:
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {
'hosts': [('127.0.0.1', 6379)],
},
},
}
- Add the WebSocket routing to your asgi.py:
django_asgi_app = get_asgi_application()
from django_admin_collaborator.routing import websocket_urlpatterns
application = ProtocolTypeRouter({
'http': get_asgi_application(),
'websocket': AuthMiddlewareStack(
URLRouter(
websocket_urlpatterns
)
),
})
Configuration
You can customize the behavior of django-admin-collaborator by adding the following settings to your settings.py:
ADMIN_COLLABORATOR_OPTIONS = {
'editor_mode_text': 'You are in editor mode.',
'viewer_mode_text': 'This page is being edited by {editor_name}. You cannot make changes until they leave.',
'claiming_editor_text': 'The editor has left. The page will refresh shortly to allow editing.',
'avatar_field': None, # Set to a field name in your User model to display avatars
'notification_request_interval': 15, # Seconds between notification requests
'notification_message': 'User {username} is requesting the editors attention.',
'notification_button_text': 'Request Editor Attention',
'notification_request_sent_text': 'Request sent.',
# Chat settings
'enable_chat': True, # Enable/disable the chat feature
'chat_user_list_title': 'Online Users', # Title for the user list panel
'chat_empty_state_text': 'No other users online', # Text when no users are online
'chat_start_conversation_text': 'No messages yet. Start the conversation!', # Text for empty chat
'chat_input_placeholder': 'Type a message...', # Placeholder text for chat input field
'chat_online_status_text': 'Online', # Text for online status indicator
}
ADMIN_COLLABORATOR_ADMIN_URL = 'admin' # Your admin URL prefix
ADMIN_COLLABORATOR_REDIS_URL = 'redis://localhost:6379/0' # Redis connection URL
ADMIN_COLLABORATOR_WEBSOCKET_CONNECTION_PREFIX_URL = 'admin/collaboration' # WebSocket connection URL prefix
Usage
- Add the CollaborativeAdminMixin to your ModelAdmin classes:
from django_admin_collaborator.utils import CollaborativeAdminMixin
class YourModelAdmin(CollaborativeAdminMixin, admin.ModelAdmin):
...
Features in Detail
Edit Lock Management
- Only one user can edit an object at a time
- Automatic lock release when user disconnects
- Visual indication of edit status
- Automatic page refresh when edit lock is released
Real-time Communication
- WebSocket-based communication for instant updates
- User presence detection
- Editor status broadcasting
- Content update notifications
Editor Attention System
- Users can request editor's attention
- Configurable notification intervals
- Customizable notification messages
- Visual indicators for attention requests
Customization Options
- Customizable text messages
- Avatar support for user identification
- Configurable notification intervals
- Customizable admin URL prefix
- Redis connection configuration
Security
- WebSocket connections are authenticated using Django's authentication system
- Only staff users can access collaborative features
- Redis-based lock management ensures data consistency
- Secure WebSocket communication
Deployment
Heroku Deployment
If you're deploying this application on Heroku, ensure that you configure the database connection settings appropriately to optimize performance:
# settings.py
if not DEBUG:
import django_heroku
django_heroku.settings(locals())
DATABASES['default']['CONN_MAX_AGE'] = 0
Documentation
For complete documentation, please visit:
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
- Django team for their amazing framework
- Channels team for WebSocket support
- All contributors who have helped improve this package
Support
If you encounter any issues or have questions, please open an issue on the GitHub repository.
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 django_admin_collaborator-0.4.0.tar.gz.
File metadata
- Download URL: django_admin_collaborator-0.4.0.tar.gz
- Upload date:
- Size: 30.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d46c9fd98c88df09496e61eb033f62f8db656d7fa984c0babb1d3c44aa66f5e
|
|
| MD5 |
e76bddcab94c88d6e3d8cbb7c404f149
|
|
| BLAKE2b-256 |
a8149d2aca62f3c0b67fb6adb40e73b6ff04857976505b2a52421b77fdcb0039
|
File details
Details for the file django_admin_collaborator-0.4.0-py3-none-any.whl.
File metadata
- Download URL: django_admin_collaborator-0.4.0-py3-none-any.whl
- Upload date:
- Size: 29.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4b047060d36d2c2b6b28230c5131c75f6a5807354ce78710075e7f3d9607236
|
|
| MD5 |
c0c0453c1cbdec1caf84c41b5750fdac
|
|
| BLAKE2b-256 |
94b7fa2a60868450d2f7812452ea83646d7314f3011b9ab7ca4d6c38cfd64f72
|