mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 09:31:09 -05:00
4.4 KiB
4.4 KiB
System Patterns
Architectural Patterns
MVT Implementation
-
Models
- Use abstract base classes for common fields
- Implement custom model managers for complex queries
- Define clear relationships and constraints
- Include field-level validation
-
Views
- Prefer class-based views
- Use mixins for shared functionality
- Implement proper permission checks
- Handle HTMX requests explicitly
-
Templates
- Maintain hierarchy with base templates
- Use partial templates for HTMX responses
- Implement component-based structure
- Follow progressive enhancement
Design Patterns
Data Access
-
Query Patterns
- Use select_related() for foreign keys
- Implement prefetch_related() for reverse relationships
- Create custom model managers
- Optimize database queries
-
Caching Strategy
- Cache template fragments
- Implement model-level caching
- Use Redis for session storage
- Cache invalidation rules
Historical Tracking
- All model changes create immutable pghistory events
- Events contain:
- Full object state snapshot
- Contextual metadata (user, request fingerprint)
- Semantic event label (created, updated, deleted)
- Middleware integration:
# core/middleware.py pghistory.context(lambda request: { 'user': str(request.user) if request.user.is_authenticated else None, 'ip': request.META.get('REMOTE_ADDR'), 'user_agent': request.META.get('HTTP_USER_AGENT') })
Frontend Patterns
-
HTMX Integration
<!-- Partial Update Pattern --> <div hx-get="/endpoint" hx-trigger="event" hx-target="#target"> -
AlpineJS Components
<!-- State Management Pattern --> <div x-data="{ state: {} }" x-init="state = await fetchData()"> -
Tailwind Components
<!-- Component Structure --> <div class="component-wrapper"> <div class="component-header"></div> <div class="component-content"></div> </div>
Authentication Patterns
User Management
-
Custom User Model
- Extended user profiles
- Role-based permissions
- Activity tracking
- Profile customization
-
Authentication Flow
- Login/registration process
- Password reset workflow
- Email verification
- Session management
Content Management
Moderation Flow
-
Submission Process
- Content validation
- Automatic checks
- Manual review queue
- Approval workflow
-
Review System
- Rating framework
- Media handling
- User verification
- Content filtering
Error Handling
Backend Errors
-
Exception Handling
try: # Operation except SpecificException as e: # Specific handling except Exception as e: # Generic handling -
Response Patterns
# Success Response return JsonResponse({'status': 'success', 'data': data}) # Error Response return JsonResponse({'status': 'error', 'message': str(e)})
Frontend Errors
- User Feedback
- Toast notifications
- Inline validation
- Form feedback
- Error states
Testing Patterns
Unit Tests
class ModelTests(TestCase):
def setUp(self):
# Test setup
def test_specific_functionality(self):
# Test implementation
Integration Tests
class ViewTests(TestCase):
def setUp(self):
self.client = Client()
def test_view_functionality(self):
# Test implementation
Development Workflows
Package Management
IMPORTANT: When adding Python packages to the project, only use UV:
uv add <package>
Do not attempt to install packages using any other method (pip, poetry, etc.).
Development Server Management
Server Startup Process IMPORTANT: Always execute the following command exactly as shown to start the development server:
lsof -ti :8000 | xargs kill -9; find . -type d -name "__pycache__" -exec rm -r {} +; uv run manage.py tailwind runserver
Note: These steps must be executed in this exact order as a single command to ensure consistent behavior.
Feature Development
-
Planning
- Technical specification
- Component design
- Database schema
- API endpoints
-
Implementation
- Model creation
- View implementation
- Template design
- Testing coverage
-
Review Process
- Code review
- Testing verification
- Documentation update
- Deployment planning