# Technology Stack **Analysis Date:** 2026-05-07 ## Languages **Primary:** - Python 3.8 - Entire backend application (specified in `Dockerfile` line 2) ## Runtime **Environment:** - Python 3.8 via Docker container (docker.m.daocloud.io/python:3.8) - ASGI server: Daphne for WebSocket + HTTP support (see `run.sh`) **Package Manager:** - pip 3.8+ (Python package manager) - Lockfile: No pinned versions in `requirements.txt` (line 1-42) — dependencies are unpinned, allowing flexibility but risking compatibility issues ## Frameworks **Core:** - Django 4.2.13 - Primary web framework (declared in `qy_lty/settings.py:4`) - Django REST Framework (DRF) - REST API implementation (in `requirements.txt`) - Django Channels - WebSocket support for real-time device communication (in `requirements.txt`, configured in `qy_lty/settings.py:501`) **Real-Time & Async:** - Daphne - ASGI server to serve both HTTP and WebSocket (in `requirements.txt`, launched via `run.sh`) - channels-redis - Channel layer using Redis for inter-process messaging (in `requirements.txt`, configured at `qy_lty/settings.py:504-511`) - aioredis - Async Redis client (in `requirements.txt`) **API Documentation:** - drf-yasg - Generates Swagger/OpenAPI documentation for DRF (in `requirements.txt`, configured at `qy_lty/settings.py:513-549`) **Database & Caching:** - PostgreSQL - Primary relational database (configured at `qy_lty/settings.py:166-172`) - Redis - Cache backend and WebSocket channel layer (configured at `qy_lty/settings.py:252-260` for cache, `504-511` for channels) - Client: django-redis for Django integration (in `requirements.txt`) - Password-authenticated via environment variables **Admin & UI:** - django-simpleui - Enhanced admin interface with Chinese localization (in `requirements.txt`, configured at `qy_lty/settings.py:475-498`) - django-rosetta - Translation management UI (in `requirements.txt`) **Authentication & Authorization:** - django-allauth - Social authentication framework including WeChat provider (in `requirements.txt`, configured at `qy_lty/settings.py:52-56`, backend at `qy_lty/settings.py:321-325`) - dj_rest_auth - Token-based REST authentication bridge (in `requirements.txt`) - django-phone-verify - Phone verification support (in `requirements.txt`) - Custom: `userapp.authentication.RedisTokenAuthentication` - Token stored in Redis with 30-day TTL (see `CLAUDE.md` line 122) **Development & Debugging:** - django-debug-toolbar - Development-time debugging (in `requirements.txt`) - django-cors-headers - CORS middleware for cross-origin requests (in `requirements.txt`, middleware at `qy_lty/settings.py:85`) **Task Scheduling:** - APScheduler (apscheduler) - Background task scheduling (in `requirements.txt`) **File Storage & Image Processing:** - Pillow - Image processing library (in `requirements.txt`) - oss2 - Aliyun OSS Python SDK for file uploads (in `requirements.txt`, used in `common/oss.py`) **Data Export & Processing:** - openpyxl - Excel file generation (in `requirements.txt`) **Utilities:** - requests - HTTP client for external API calls (in `requirements.txt`, used throughout for service integrations) - cryptography - Encryption/decryption utilities (in `requirements.txt`) - python-decouple - Environment variable loading (in `requirements.txt`, used at `qy_lty/settings.py:14`) - openai - OpenAI Python SDK for Kimi API (compatible with OpenAI spec, in `requirements.txt`) ## Key Dependencies **Critical Infrastructure:** - mysqlclient - MySQL database adapter (in `requirements.txt`, though PostgreSQL is primary; MySQL config commented at `qy_lty/settings.py:159-164`) - psycopg2-binary - PostgreSQL database adapter (in `requirements.txt`, active at `qy_lty/settings.py:166`) **Aliyun (Alibaba Cloud) SDKs:** - aliyun-python-sdk-core - Core SDK for Aliyun services (in `requirements.txt`) - aliyun-python-sdk-dysmsapi - SMS service SDK (in `requirements.txt`, configured at `qy_lty/settings.py:300-304`) - oss2 - OSS (Object Storage Service) SDK (in `requirements.txt`, integrated at `common/oss.py:1-90`) - alibabacloud_facebody20191230 - Face detection/recognition service (in `requirements.txt`) - alibabacloud_tea_console, alibabacloud_tea_util, alibabacloud_tea_openapi - Aliyun SDK utilities (in `requirements.txt`) - aliyun-log-python-sdk - Logging service SDK (in `requirements.txt`, used at `common/aliyun_logging.py:1-36`) **AI & LLM:** - openai - OpenAI Python client, used for Kimi (OpenAI-compatible API) at `aiapp/kimi.py:2` (configured at `qy_lty/settings.py:349-350`) ## Configuration **Environment:** - Loaded via `python-decouple.config()` from `.env` file (see `qy_lty/settings.py:14`) - Critical env vars required: - `SECRET_KEY` - Django secret key - `DEBUG` - Debug mode flag - `POSTGRESQL_DATABASE_NAME`, `POSTGRESQL_DATABASE_USER`, `POSTGRESQL_DATABASE_PASSWORD`, `POSTGRESQL_DATABASE_HOST`, `POSTGRESQL_DATABASE_PORT` - PostgreSQL connection - `REDIS_LOCATION`, `REDIS_PASSWORD` - Redis cache and channel layer - `KIMI_API_KEY`, `KIMI_BASE_URL` - Kimi AI configuration - `ALIYUN_*` family - SMS, OSS, NLS, VI, logging credentials - `VOLCENGINE_ACCESS_KEY`, `VOLCENGINE_SECRET_KEY` - RTC service credentials - Audio service provider env vars (AUDIO_SERVICE_HUOSHAN_*, AUDIO_SERVICE_TENCENT_*) **Build:** - `Dockerfile` - Docker image definition (lines 1-33), uses Python 3.8 with China mirror for pip - `docker-compose.yml` - Service orchestration (lines 1-33), exposes port 12012 → 8000 - `run.sh` - Local development entrypoint (lines 1-2), launches Daphne on 0.0.0.0:8000 ## Platform Requirements **Development:** - Python 3.8+ - pip for dependency installation - PostgreSQL database server (or MySQL as fallback) - Redis server for cache + channel layer - Docker & docker-compose for containerized development **Production:** - Docker container (see `Dockerfile` and `docker-compose.yml`) - External PostgreSQL service - External Redis service - HTTPS reverse proxy (e.g., Nginx) recommended for production - Deployment target: Linux/Docker (accessible via port 12012 in example) --- *Stack analysis: 2026-05-07*