搭个Django网站,比写周报还快

@曹平
2026-01-19 02:32
阅读 1134

上周五晚上十点,我正窝在出租屋里啃着冷掉的外卖,突然收到外包甲方的消息:“能不能下周二前给我们搭个后台管理页面?就展示下用户数据,能增删改查就行。”
我差点把筷子扔了——这不就是个典型的CRUD需求嘛!但转念一想:正好最近在研究Django,不如拿它练手?毕竟,接外包的人,工具链得灵活,不能只会Node.js和Express。

我是北京一个普通斜杠程序员,白天在一家中型SaaS公司写后端,晚上接点外包单子补贴房租。通勤一小时,地铁上刷文档、午休时调API是常态。最近半年,我重度依赖ChatGPT和Claude辅助开发——不是偷懒,是真的效率高。比如这次,我让Claude帮我生成Django项目结构,省了半小时查官方文档。

为什么选Django?

说实话,我之前主力是用Flask,轻量、自由,但一旦项目复杂起来,就得自己搭轮子:用户认证、Admin后台、ORM迁移……而Django“自带电池”(batteries-included)的设计哲学,简直是为这种“快速交付”场景量身定制的。

尤其这次甲方要的是“后台管理”,Django Admin开箱即用,连前端都不用写。产品经理要是看到这个,估计又要说“技术驱动业务”了(翻白眼)。

从零开始:5分钟跑起一个站点

首先,确保你有Python 3.8+。我本地用的是pyenv管理版本,避免和系统Python打架。

# 创建虚拟环境
python -m venv django-demo
source django-demo/bin/activate  # Linux/Mac
# django-demo\Scripts\activate  # Windows

# 安装Django
pip install django

# 创建项目
django-admin startproject mysite
cd mysite

# 启动开发服务器
python manage.py runserver

浏览器打开 http://127.0.0.1:8000,看到那熟悉的火箭图标——恭喜,你的第一个Python网站跑起来了!

小贴士:别在生产环境用runserver!这只是开发服务器,性能差、不安全。上线得用Gunicorn + Nginx,后面会提。

建模:用户数据怎么存?

甲方给的需求很简单:用户有姓名、邮箱、注册时间。但作为后端,我得考虑扩展性。比如,未来可能加手机号、状态字段,甚至关联订单。

于是,我建了一个accounts app:

python manage.py startapp accounts

accounts/models.py 里定义模型:

from django.db import models
from django.utils import timezone

class User(models.Model):
    name = models.CharField(max_length=100, verbose_name="姓名")
    email = models.EmailField(unique=True, verbose_name="邮箱")
    created_at = models.DateTimeField(default=timezone.now, verbose_name="注册时间")
    is_active = models.BooleanField(default=True, verbose_name="是否激活")

    class Meta:
        verbose_name = "用户"
        verbose_name_plural = "用户"

    def __str__(self):
        return self.name

注意几点:

  • EmailField 自动校验邮箱格式;
  • unique=True 避免重复注册;
  • timezone.now 而不是 datetime.now(),避免时区问题(Django默认用UTC);
  • verbose_name 让Admin后台显示中文,甲方看了会觉得“这人挺专业”。

然后注册app到 settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    # ... 其他
    'accounts',  # ← 加这一行
]

接着生成并执行迁移:

python manage.py makemigrations
python manage.py migrate

搞定!数据库表自动创建(默认SQLite,生产环境建议换PostgreSQL)。

Admin后台:不用写一行前端

重头戏来了。Django Admin的强大在于,你几乎不用写UI代码。

accounts/admin.py 注册模型:

from django.contrib import admin
from .models import User

@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    list_display = ['name', 'email', 'created_at', 'is_active']
    list_filter = ['is_active', 'created_at']
    search_fields = ['name', 'email']
    date_hierarchy = 'created_at'

再创建一个超级用户:

python manage.py createsuperuser
# 按提示输入用户名、邮箱、密码

重启服务,访问 /admin,登录后就能看到漂亮的管理界面!支持搜索、筛选、分页、批量操作——这些功能,如果用Flask手写,至少得两天。

接口设计:预留API扩展

虽然这次甲方只要Admin,但作为有经验的后端,我习惯提前规划API。万一哪天他们说“我们要做小程序对接”呢?

我在 urls.py 里加了个命名空间:

# mysite/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/v1/', include('accounts.urls')),  # ← 预留API入口
]

然后在 accounts/urls.py

from django.urls import path
from . import views

urlpatterns = [
    # path('users/', views.user_list, name='user_list'),
]

现在虽然没实现view,但路径已经预留。等真要加API,直接用Django REST Framework(DRF)几行代码就能出RESTful接口。

生产部署:别踩我的坑

去年双11前,我帮一个电商客户紧急上线Django后台,结果因为没配静态文件,Admin的CSS全挂了,运维在群里@我:“兄弟,页面裸奔了!” 当时真的想砸电脑。

所以这次,我提前配置好:

  1. 静态文件收集:设置 STATIC_ROOT,运行 collectstatic
  2. 数据库切换:开发用SQLite,生产务必换PostgreSQL或MySQL;
  3. 关闭DEBUGsettings.pyDEBUG = False,否则会泄露敏感信息;
  4. 用Gunicornpip install gunicorn,启动命令:gunicorn mysite.wsgi:application --bind 0.0.0.0:8000
  5. Nginx反向代理:处理静态文件和SSL。

部署清单我整理成表格,方便以后复用:

项目 开发环境 生产环境
数据库 SQLite PostgreSQL
DEBUG True False
静态文件 开发服务器托管 Nginx托管 + collectstatic
服务器 runserver Gunicorn + Nginx
SECRET_KEY 本地写死 环境变量注入

开发心得:外包党的生存之道

这次用Django搭站,从需求到交付不到8小时。对比我之前用Flask手撸,效率提升至少3倍。关键在于:

  • 不要重复造轮子:Django Admin、Auth、ORM都是经过千万项目验证的,稳定可靠;
  • 快速验证MVP:甲方往往自己也不清楚要什么,先给个可交互的Demo,比画100页PRD有用;
  • 善用AI辅助:我让Claude帮我写Model字段的help_text,省了写文档的时间;
  • 留扩展接口:哪怕现在用不上,也要为未来留门。

当然,Django也有缺点:学习曲线比Flask陡,灵活性稍差。但对“快速交付”场景,它绝对是Python后端的最优解之一。

最后,周二早上我把链接发给甲方,对方回了个“👍”。那一刻,我觉得通勤一小时、吃冷外卖都值了——毕竟,副业收入到账的感觉,比年终奖还爽。

如果你也在接外包,或者想快速验证产品想法,不妨试试Django。它可能不会让你成为架构师,但绝对能让你准时下班,甚至……多接一单。

评论 0

最热最新
暂无评论
@曹平Lv.1
0
影响力
0
文章
0
粉丝