# Django (see manage.py comment / migrations for minor version drift) Django>=5.0,<7.0 # .env loading (mysite/settings.py) python-dotenv>=1.0,<2 # MySQL via PyMySQL shim (mysite/settings.py → pymysql.install_as_MySQLdb) PyMySQL>=1.1,<2 # Rich text editor in dashboard (INSTALLED_APPS: tinymce) django-tinymce>=4.0,<5 # Sanitize public HTML from dashboard (mainapp.utils.html_sanitize) bleach>=6.0,<7 # Verify uploaded images are real images (mainapp.utils.upload_validation) Pillow>=10.0,<12 # Compile .po → .mo on Windows without GNU gettext (python manage.py compile_po) polib>=1.2,<2 # Optional: shared cache for rate limiting on multi-worker deploys (set REDIS_URL in .env) # redis>=5.0,<6 # Optional: services Excel import/export in dashboard (falls back to CSV if missing) openpyxl>=3.1,<4 # Dashboard EN ↔ AR translate buttons (mainapp.utils.dashboard_translate) deep-translator>=1.11,<2 # Optional: automatic Google Drive backup of monthly Excel/media ZIPs google-api-python-client>=2.100,<3 google-auth>=2.20,<3 google-auth-oauthlib>=1.2,<2 # CORS for headless frontends (Next.js → /api/v1/) django-cors-headers>=4.0,<5 # Two-factor authentication (TOTP / Google Authenticator) django-two-factor-auth>=1.18,<2 django-otp>=1.7,<2 django-formtools>=2.6,<3 django-phonenumber-field>=8.4,<9 phonenumbers>=8.13,<9 qrcode>=8.2,<9 # Only if you use PostgreSQL (``DB_ENGINE=django.db.backends.postgresql``): # psycopg[binary]>=3.2,<4