从零到上线:我用 Django 搭了个网站,顺便治好了选择困难症

王庆华△
2026-05-26 00:00
阅读 1259

上周五晚上十点,办公室只剩下我和隔壁工位的运维小哥。他一边啃泡面一边问我:“你这前端都写完三天了,后端 API 还没动静?明天演示给投资人看啊。”
我当时正盯着屏幕里一片红的 ImportError: No module named 'django',心里默默问候了 Python 环境管理八百遍。

我是上海某 20 人创业公司的“全栈背锅侠”——前端动画、后端接口、数据库建模、部署脚本,甚至帮产品经理画原型图都干过。最近公司想快速验证一个新点子:做一个极简版的 AI 写作助手,前端用 Vue + GSAP 做流畅交互动效(我对这个部分超有执念),后端……领导说:“你不是会 Python 吗?上 Django 吧,快。”

行吧,毕竟比 Java 配 Spring Boot 写个 Hello World 要快多了(别问,问就是去年双11被 Java 的 Maven 依赖地狱整出 PTSD)。


为什么是 Django?而不是 Flask、FastAPI,或者直接上 Amazon Q?

说实话,我一开始也犹豫。Flask 轻量,FastAPI 异步性能好,甚至最近团队里有人在试用 Amazon Q 自动生成 CRUD 接口——但问题是,我们只有 48 小时 上线 MVP。

Django 的“开箱即用”特性在这时候简直是救命稻草:

  • 自带 admin 后台(产品经理能自己改数据!)
  • ORM 抽象掉 SQL 手写(测试同学再也不用吐槽我写错字段名)
  • 用户认证、CSRF、XSS 防护默认开启(安全基线拉满)

至于 Llama?我们确实想接入 Meta 开源的大模型做内容生成,但那是第二阶段的事。第一版先跑通流程,别让投资人觉得我们在画大饼就行。


环境搭建:别再被 virtualenv 折磨了

很多教程一上来就 pip install django,结果全局污染搞得你连 python manage.py runserver 都跑不起来。作为踩过无数坑的老油条,我直接上 venv + requirements.txt 组合拳:

# 创建虚拟环境(Python 3.8+)
python -m venv .venv
source .venv/bin/activate  # Linux/Mac
# .venv\Scripts\activate   # Windows

# 安装 Django(我选 4.2 LTS 版,稳!)
pip install Django==4.2.7 gunicorn psycopg2-binary

# 生成依赖清单(上线前必备)
pip freeze > requirements.txt

📌 血泪教训:别在 Windows WSL 里用 pythonpy 混着调,我上周刚因此把两个虚拟环境搞串了,调试到凌晨三点。


快速生成项目骨架:5 分钟搞定基础结构

django-admin startproject writingai .
cd writingai
python manage.py startapp core

目录长这样:

writingai/
├── core/               # 我们的业务 app
├── writingai/          # 项目配置
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
└── requirements.txt

重点来了:别把所有逻辑塞进 views.py! 创业公司代码没人 review,但至少要对自己负责。我按习惯拆成:

  • models.py:定义数据结构
  • views.py:处理 HTTP 请求(尽量薄)
  • services.py:核心业务逻辑
  • serializers.py(如果接 REST API)

数据库设计:别学我早期乱建表

早期我为了快,直接 TextField 存 JSON,结果后来加搜索功能时差点重构整个表。这次吸取教训,规规矩矩建模:

# core/models.py
from django.db import models
from django.contrib.auth.models import User

class WritingTask(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    prompt = models.TextField()          # 用户输入的提示词
    content = models.TextField(blank=True)  # AI 生成内容
    model_used = models.CharField(max_length=20, default='llama-7b')  # 记录用的哪个模型
    created_at = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        ordering = ['-created_at']

💡 生产建议:本地用 SQLite 调试,但 settings.py 里一定要预留 PostgreSQL 配置。上线前切换只要改两行,避免后期迁移痛苦。


写个视图:别怕 CBV,它真香

很多人死磕 FBV(函数视图),但 Django 的 Class-Based View(CBV)配合 Mixin 能省大量重复代码。比如做个登录才能访问的页面:

# core/views.py
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import ListView
from .models import WritingTask

class TaskListView(LoginRequiredMixin, ListView):
    model = WritingTask
    template_name = 'tasks/list.html'
    context_object_name = 'tasks'
    
    def get_queryset(self):
        return WritingTask.objects.filter(user=self.request.user)

前端模板用 Django 自带的模板引擎渲染(虽然我平时写 Vue,但这种内部工具站没必要上 SPA)。关键是要 防 XSS

<!-- templates/tasks/list.html -->
{% for task in tasks %}
  <div>
    <h3>{{ task.title|escape }}</h3>
    <p>{{ task.content|linebreaks }}</p>
  </div>
{% endfor %}

|escape|linebreaks 过滤器是安全底线!


部署上线:Gunicorn + Nginx,别再用 runserver 丢人了

本地 runserver 跑得欢,一上生产就崩?常见问题:

  1. 静态文件 404 → 用 collectstatic 收集到统一目录
  2. 数据库连接超时 → 配置连接池(pgbouncerdjango-db-geventpool
  3. 内存泄漏 → 监控 Gunicorn worker 内存,定期重启

我的 gunicorn.conf.py

bind = "0.0.0.0:8000"
workers = 3  # (CPU 核数 * 2) + 1
worker_class = "sync"
max_requests = 1000      # 防止内存泄漏
max_requests_jitter = 100
preload_app = True       # 减少启动延迟

配合 Nginx 反向代理,HTTPS 用 Let's Encrypt 免费搞定。整个部署脚本不到 50 行,比配 Java 的 Tomcat + Jenkins 流水线快乐多了。


对比一下:Django vs 其他方案(含 Java)

方案 开发速度 学习曲线 生产稳定性 适合场景
Django ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ 快速验证、内部工具
Flask ⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐ 微服务、轻量 API
FastAPI ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ 高并发异步场景
Spring Boot (Java) ⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ 大型企业级系统

说实话,如果这是个需要扛住百万 DAU 的核心系统,我会选 Java + Spring Cloud —— 但创业公司 MVP 阶段,速度就是生命线。Django 让我在 36 小时内交付了可演示版本,投资人当场点头,产品狗都哭了。


最后一点碎碎念:代码人生,不止于框架

写这篇文章的时候,窗外上海下着暴雨。我想起三年前还在用 JSP 写企业后台,每天和 XML 配置文件搏斗。现在用 Django 十分钟搭个带用户系统的网站,还能顺手集成 Llama 的 API —— 技术真的在变好。

但别忘了:框架只是工具,解决问题才是目的。无论是用 Python、Java,还是让 Amazon Q 自动生成代码,最终要交付的是价值,不是技术炫技。

所以,别纠结“该不该学 Django”。如果你有个想法,今晚就 pip install django,跑通第一个页面。剩下的,边做边学。

毕竟,在创业公司,deadline 才是最好的老师。而你的第一个用户,可能正等着用你的网站呢。

(完)

P.S. 如果你也在上海搞技术,欢迎约咖啡聊动画交互 or Django 性能优化!租房合租也行(认真脸)。

评论 0

最热最新
暂无评论
王庆华△Lv.1
0
影响力
0
文章
0
粉丝