mcpField
D
django-developer

django-developer

github.com/404kidwiz开发98 次安装
代码仓库

关于 django-developer

面向 Django Python Web 应用开发者的技能,涵盖 API、异步视图、HTMX 界面、实时功能和后台任务。还提供架构选择、ORM 优化建议与可复用实现模式。

主要功能

  1. 01Django Ninja 与 DRF API 指引
  2. 02异步视图与 ORM 模式
  3. 03HTMX 服务端驱动界面
  4. 04Django Channels WebSocket
  5. 05Celery 后台任务
  6. 06ORM 与数据库优化

适用场景

  1. 01构建 REST API
  2. 02添加 WebSocket 功能
  3. 03创建全栈 HTMX 应用
  4. 04处理后台任务

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/404kidwiz/claude-supercode-skills --skill django-developer

安装后在 Claude Code 中输入/django-developer确认已加载。

详细介绍

Django 开发

目的

提供 Django 和 Python Web 开发方面的专业知识,专注于异步视图、Django Ninja API 和现代全栈模式。使用 HTMX 构建健壮的 Python Web 应用,实现由服务器驱动的 UI;使用 Django Channels 实现实时功能;使用 Celery 处理后台任务。

适用场景

  • 构建可扩展的 REST API(Django REST Framework 或 Django Ninja)
  • 实现实时功能(通过 Django Channels 使用 WebSocket)
  • 使用 HTMX 开发全栈应用(由服务器驱动的 UI)
  • 处理后台任务(Celery/Redis)
  • 优化数据库性能(ORM 的 Select/Prefetch、索引)
  • 设计复杂的数据模型(Postgres JSONB、约束)


2. 决策框架

架构选择
What is the project goal?
│
├─ **API First (Headless)**
│  ├─ Type-safe / Modern? → **Django Ninja** (Pydantic-based, fast)
│  └─ Legacy / Enterprise? → **DRF** (Batteries included, heavy)
│
├─ **Full Stack (Monolith)**
│  ├─ Complex UI (SPA)? → **Django + React/Vue** (API separation)
│  └─ Dynamic but Simple? → **Django + HTMX** (Hypermedia-driven, no build step)
│
└─ **Real-Time**
   ├─ Simple updates? → **HTMX Polling** or **SSE**
   └─ Complex/Bi-directional? → **Django Channels (WebSockets)**
异步策略(Django 4.2+)
特性同步(WSGI)异步(ASGI)建议
数据库查询User.objects.get()await User.objects.aget()对高并发 I/O(代理、聊天)使用异步。
视图def view(req):async def view(req):CPU 密集型任务使用同步方式。
中间件标准兼容异步确保中间件栈支持异步。
数据库优化
  • N+1 问题: 始终检查 select_related(外键)和 prefetch_related(M2M)。
  • 索引: JSONB 搜索使用 GinIndex,常规查询使用 BTree。
  • 批量操作: 对数量超过 100 的批次使用 bulk_create 和 bulk_update。

警示信号 → 升级给 database-optimizer:

  • 在 for 循环中执行 ORM 查询
  • 将 10k+ 行加载到内存中(使用 .iterator())
  • 使用“Raw SQL”却未绑定参数(存在 SQL 注入风险)
  • 锁定问题(Select for Update)导致流量受阻


工作流 2:HTMX 集成(由服务器驱动的 UI)

目标: 无需编写 React,即可实现“无限滚动”或“点击编辑”。

步骤:

  1. 视图(Python)

    def contact_list(request):
        contacts = Contact.objects.all()
        # 如果是 HTMX 请求,只返回行(部分内容)
        if request.htmx:
            template = "partials/contact_rows.html"
        else:
            template = "contact_list.html"
        
        return render(request, template, {"contacts": contacts})
    
  2. 模板(contact_list.html)

    
    <input type="text" 
           name="search" 
           hx-get="/contacts" 
           hx-trigger="keyup changed delay:500ms" 
           hx-target="#contact-rows">
    
    <table>
      <tbody id="contact-rows">
        {% include "partials/contact_rows.html" %}
      </tbody>
    </table>
    


工作流 4:异步 ORM 和视图

目标: 使用 async/await 构建高吞吐量 API 端点。

步骤:

  1. 视图定义

    # views.py
    from asgiref.sync import sync_to_async
    
    async def dashboard_stats(request):
        # 并行数据库查询
        user_count_task = User.objects.acount()
        order_count_task = Order.objects.acount()
        
        user_count, order_count = await asyncio.gather(
            user_count_task, 
            order_count_task
        )
    
        return JsonResponse({"users": user_count, "orders": order_count})
    
  2. 中间件兼容性

    • 确保所有中间件都支持异步(async_capable = True)。
    • 如果存在阻塞中间件,则使用 sync_to_async 对其进行封装。


4. 模式与模板

模式 1:服务层(业务逻辑)

适用场景: 保持视图和模型精简。

# services.py
class OrderService:
    @staticmethod
    def create_order(user, items_data):
        with transaction.atomic():
            order = Order.objects.create(user=user)
            for item in items_data:
                OrderItem.objects.create(order=order, **item)
            
            # Complex logic here
            PaymentGateway.charge(order)
            return order
模式 2:自定义 Manager(查询逻辑)

适用场景: 可复用的筛选器。

class PublishedManager(models.Manager):
    def get_queryset(self):
        return super().get_queryset().filter(status='PUBLISHED', pub_date__lte=timezone.now())

class Article(models.Model):
    # ...
    objects = models.Manager() # Default
    published = PublishedManager() # Custom
模式 3:异步聊天(Channels)

适用场景: WebSocket 处理。

# consumers.py
class ChatConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        self.room_name = "lobby"
        await self.channel_layer.group_add(self.room_name, self.channel_name)
        await self.accept()

    async def disconnect(self, close_code):
        await self.channel_layer.group_discard(self.room_name, self.channel_name)

    async def receive(self, text_data):
        # Broadcast to group
        await self.channel_layer.group_send(
            self.room_name,
            {"type": "chat_message", "message": text_data}
        )


6. 集成模式

frontend-ui-ux-engineer:
  • 交接:Django Developer 创建 HTMX 局部模板(_card.html)→ UI Dev 为其添加样式。
  • 协作:定义用于更新页面多个部分的「OOB Swap」(带外交换)。
  • 工具:Tailwind CSS。
database-optimizer:
  • 交接:Django Dev 记录慢查询 → DB Optimizer 添加索引。
  • 协作:分析 ORM 生成的 SQL 的 EXPLAIN ANALYZE 输出。
  • 工具:Django Debug Toolbar。
devops-engineer:
  • 交接:Django Dev 提供 Dockerfile → DevOps 配置 Gunicorn/Uvicorn。
  • 协作:处理静态文件(Whitenoise 与 S3/CloudFront)。
  • 工具:Docker Compose。

评论

支持 Markdown