从零到上线:我用 Django 搭了个网站,顺便治好了选择困难症
上周五晚上十点,办公室只剩下我和隔壁工位的运维小哥。他一边啃泡面一边问我:“你这前端都写完三天了,后端 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 里用
python和py混着调,我上周刚因此把两个虚拟环境搞串了,调试到凌晨三点。
快速生成项目骨架: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 跑得欢,一上生产就崩?常见问题:
- 静态文件 404 → 用
collectstatic收集到统一目录 - 数据库连接超时 → 配置连接池(
pgbouncer或django-db-geventpool) - 内存泄漏 → 监控 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