chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,313 @@
|
||||
# Django Project Configuration
|
||||
|
||||
This file provides specific guidance for Django web application development using Claude Code.
|
||||
|
||||
## Project Overview
|
||||
|
||||
This is a Django web application project optimized for scalable web development with the Django framework. The project follows Django best practices and conventions.
|
||||
|
||||
## Django-Specific Development Commands
|
||||
|
||||
### Project Management
|
||||
- `django-admin startproject myproject` - Create new Django project
|
||||
- `python manage.py startapp myapp` - Create new Django app
|
||||
- `python manage.py runserver` - Start development server
|
||||
- `python manage.py runserver 0.0.0.0:8000` - Start server accessible from network
|
||||
|
||||
### Database Management
|
||||
- `python manage.py makemigrations` - Create database migrations
|
||||
- `python manage.py migrate` - Apply database migrations
|
||||
- `python manage.py showmigrations` - Show migration status
|
||||
- `python manage.py sqlmigrate app_name migration_name` - Show SQL for migration
|
||||
- `python manage.py dbshell` - Open database shell
|
||||
|
||||
### User Management
|
||||
- `python manage.py createsuperuser` - Create admin superuser
|
||||
- `python manage.py changepassword username` - Change user password
|
||||
- `python manage.py shell` - Open Django shell
|
||||
|
||||
### Static Files & Media
|
||||
- `python manage.py collectstatic` - Collect static files for production
|
||||
- `python manage.py findstatic filename` - Find static file location
|
||||
|
||||
### Testing & Quality
|
||||
- `python manage.py test` - Run Django tests
|
||||
- `python manage.py test app_name` - Run tests for specific app
|
||||
- `python manage.py test --keepdb` - Run tests keeping test database
|
||||
- `coverage run --source='.' manage.py test` - Run tests with coverage
|
||||
|
||||
### Development Tools
|
||||
- `python manage.py check` - Check for Django issues
|
||||
- `python manage.py validate` - Validate models
|
||||
- `python manage.py inspectdb` - Generate models from existing database
|
||||
- `python manage.py dumpdata app_name` - Export data
|
||||
- `python manage.py loaddata fixture.json` - Import data
|
||||
|
||||
## Django Project Structure
|
||||
|
||||
```
|
||||
myproject/
|
||||
├── manage.py # Django management script
|
||||
├── myproject/ # Project configuration
|
||||
│ ├── __init__.py
|
||||
│ ├── settings/ # Settings modules
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── base.py # Base settings
|
||||
│ │ ├── development.py # Development settings
|
||||
│ │ ├── production.py # Production settings
|
||||
│ │ └── testing.py # Testing settings
|
||||
│ ├── urls.py # URL configuration
|
||||
│ ├── wsgi.py # WSGI configuration
|
||||
│ └── asgi.py # ASGI configuration
|
||||
├── apps/ # Django applications
|
||||
│ ├── users/ # User management app
|
||||
│ ├── blog/ # Blog app example
|
||||
│ └── api/ # API app
|
||||
├── static/ # Static files
|
||||
├── media/ # User uploaded files
|
||||
├── templates/ # Django templates
|
||||
├── requirements/ # Requirements files
|
||||
│ ├── base.txt
|
||||
│ ├── development.txt
|
||||
│ └── production.txt
|
||||
└── tests/ # Test files
|
||||
```
|
||||
|
||||
## Django Settings Configuration
|
||||
|
||||
### Base Settings (settings/base.py)
|
||||
```python
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
BASE_DIR = Path(__file__).resolve().parent.parent.parent
|
||||
|
||||
# Security
|
||||
SECRET_KEY = os.environ.get('SECRET_KEY')
|
||||
DEBUG = False
|
||||
ALLOWED_HOSTS = []
|
||||
|
||||
# Application definition
|
||||
DJANGO_APPS = [
|
||||
'django.contrib.admin',
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
]
|
||||
|
||||
THIRD_PARTY_APPS = [
|
||||
'rest_framework',
|
||||
'django_extensions',
|
||||
]
|
||||
|
||||
LOCAL_APPS = [
|
||||
'apps.users',
|
||||
'apps.blog',
|
||||
]
|
||||
|
||||
INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS
|
||||
|
||||
# Database
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.postgresql',
|
||||
'NAME': os.environ.get('DB_NAME'),
|
||||
'USER': os.environ.get('DB_USER'),
|
||||
'PASSWORD': os.environ.get('DB_PASSWORD'),
|
||||
'HOST': os.environ.get('DB_HOST', 'localhost'),
|
||||
'PORT': os.environ.get('DB_PORT', '5432'),
|
||||
}
|
||||
}
|
||||
|
||||
# Internationalization
|
||||
LANGUAGE_CODE = 'en-us'
|
||||
TIME_ZONE = 'UTC'
|
||||
USE_I18N = True
|
||||
USE_TZ = True
|
||||
|
||||
# Static files
|
||||
STATIC_URL = '/static/'
|
||||
STATIC_ROOT = BASE_DIR / 'staticfiles'
|
||||
STATICFILES_DIRS = [BASE_DIR / 'static']
|
||||
|
||||
# Media files
|
||||
MEDIA_URL = '/media/'
|
||||
MEDIA_ROOT = BASE_DIR / 'media'
|
||||
```
|
||||
|
||||
## Django Best Practices
|
||||
|
||||
### Models
|
||||
- Use descriptive model names (singular)
|
||||
- Add `__str__` methods for better admin interface
|
||||
- Use `related_name` for foreign keys
|
||||
- Implement `get_absolute_url` method
|
||||
- Add proper Meta class with ordering
|
||||
|
||||
### Views
|
||||
- Use class-based views for complex logic
|
||||
- Implement proper error handling
|
||||
- Add pagination for list views
|
||||
- Use `select_related` and `prefetch_related` for optimization
|
||||
- Implement proper permission checks
|
||||
|
||||
### URLs
|
||||
- Use app namespaces
|
||||
- Use descriptive URL names
|
||||
- Group related URLs in separate files
|
||||
- Use slug fields for SEO-friendly URLs
|
||||
|
||||
### Templates
|
||||
- Extend base templates
|
||||
- Use template inheritance effectively
|
||||
- Create reusable template tags
|
||||
- Implement proper CSRF protection
|
||||
- Use Django's built-in template filters
|
||||
|
||||
### Forms
|
||||
- Use Django forms for validation
|
||||
- Implement custom form validation
|
||||
- Use ModelForms when appropriate
|
||||
- Add proper error handling
|
||||
- Implement CSRF protection
|
||||
|
||||
## Security Considerations
|
||||
|
||||
### Django Security Settings
|
||||
```python
|
||||
# Security settings for production
|
||||
SECURE_BROWSER_XSS_FILTER = True
|
||||
SECURE_CONTENT_TYPE_NOSNIFF = True
|
||||
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
|
||||
SECURE_HSTS_PRELOAD = True
|
||||
SECURE_HSTS_SECONDS = 31536000
|
||||
SECURE_REDIRECT_EXEMPT = []
|
||||
SECURE_SSL_REDIRECT = True
|
||||
SESSION_COOKIE_SECURE = True
|
||||
CSRF_COOKIE_SECURE = True
|
||||
```
|
||||
|
||||
### User Authentication
|
||||
- Use Django's built-in authentication
|
||||
- Implement proper password policies
|
||||
- Add two-factor authentication if needed
|
||||
- Use Django's permission system
|
||||
- Implement proper session management
|
||||
|
||||
## Testing Strategy
|
||||
|
||||
### Test Organization
|
||||
```python
|
||||
# tests/test_models.py
|
||||
from django.test import TestCase
|
||||
from django.contrib.auth import get_user_model
|
||||
from apps.blog.models import Post
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
class PostModelTest(TestCase):
|
||||
def setUp(self):
|
||||
self.user = User.objects.create_user(
|
||||
username='testuser',
|
||||
email='test@example.com',
|
||||
password='testpass123'
|
||||
)
|
||||
|
||||
def test_post_creation(self):
|
||||
post = Post.objects.create(
|
||||
title='Test Post',
|
||||
content='Test content',
|
||||
author=self.user
|
||||
)
|
||||
self.assertEqual(post.title, 'Test Post')
|
||||
self.assertEqual(str(post), 'Test Post')
|
||||
```
|
||||
|
||||
### Test Types
|
||||
- **Unit tests** for models and utilities
|
||||
- **Integration tests** for views and forms
|
||||
- **Functional tests** for user workflows
|
||||
- **API tests** for REST endpoints
|
||||
|
||||
## Deployment Considerations
|
||||
|
||||
### Production Settings
|
||||
- Use environment variables for sensitive data
|
||||
- Configure proper logging
|
||||
- Set up static file serving
|
||||
- Configure database connection pooling
|
||||
- Implement proper caching strategy
|
||||
|
||||
### Docker Configuration
|
||||
```dockerfile
|
||||
FROM python:3.11-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY requirements.txt .
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
COPY . .
|
||||
|
||||
EXPOSE 8000
|
||||
|
||||
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "myproject.wsgi:application"]
|
||||
```
|
||||
|
||||
## Performance Optimization
|
||||
|
||||
### Database Optimization
|
||||
- Use `select_related()` for foreign keys
|
||||
- Use `prefetch_related()` for many-to-many
|
||||
- Add database indexes for frequent queries
|
||||
- Implement database connection pooling
|
||||
- Use database query optimization tools
|
||||
|
||||
### Caching Strategy
|
||||
- Implement Redis/Memcached for session storage
|
||||
- Use template fragment caching
|
||||
- Implement view-level caching
|
||||
- Add database query caching
|
||||
- Use CDN for static files
|
||||
|
||||
## Common Django Patterns
|
||||
|
||||
### Custom User Model
|
||||
```python
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from django.db import models
|
||||
|
||||
class User(AbstractUser):
|
||||
email = models.EmailField(unique=True)
|
||||
first_name = models.CharField(max_length=30)
|
||||
last_name = models.CharField(max_length=30)
|
||||
|
||||
USERNAME_FIELD = 'email'
|
||||
REQUIRED_FIELDS = ['username', 'first_name', 'last_name']
|
||||
```
|
||||
|
||||
### Custom Managers
|
||||
```python
|
||||
class PublishedManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
return super().get_queryset().filter(status='published')
|
||||
|
||||
class Post(models.Model):
|
||||
title = models.CharField(max_length=200)
|
||||
status = models.CharField(max_length=20, default='draft')
|
||||
|
||||
objects = models.Manager() # Default manager
|
||||
published = PublishedManager() # Custom manager
|
||||
```
|
||||
|
||||
## Django Extensions & Tools
|
||||
|
||||
### Useful Third-Party Packages
|
||||
- **Django REST Framework** - API development
|
||||
- **Celery** - Asynchronous task processing
|
||||
- **Django Debug Toolbar** - Development debugging
|
||||
- **Django Extensions** - Additional management commands
|
||||
- **Pillow** - Image processing
|
||||
- **psycopg2-binary** - PostgreSQL adapter
|
||||
Reference in New Issue
Block a user