Django入门教程:搭建你的第一个Python网站
上周五晚上十一点半,我正窝在沙发上用MacBook Pro敲代码,窗外下着小雨,咖啡已经凉了。突然收到一个老同事的消息:“你不是搞Python的吗?能不能教我搭个Django网站?我们运营部想做个活动页面,但前端说他只会写React,后端又全是Java栈……”
说实话,那一刻我真的想回一句“我也不会”,毕竟作为一个远程独立开发者,我已经连续三个月只和Git、Jira还有凌晨三点的Bug打交道了。不过转念一想——这不就是我当初入坑Django的理由吗?
为什么我又一次选择了Django?
三年前我在一家电商公司打工,那时候团队技术栈清一色Spring Boot + MyBatis,Java写得飞起。但有一次双11大促前,运营小姐姐急得快哭了:“老板说要上线一个抽奖活动,明天就要!可Java后端排期到下个月……” 产品经理在会议室拍桌子:“能不能先搞个临时页面顶一下?” 那时候我才第一次听说 Django —— 一个用 Python 写的 Web 框架,号称“开箱即用”。
结果呢?我花了一晚上搭了个原型,第二天演示完,运维小哥居然没骂我(要知道他平时连少打一个日志都要咆哮)。从那以后,我就彻底爱上了这个“能快速交付又能扛生产”的框架。
现在虽然成了自由开发者,不用再应付产品经理的“明天上线”需求,但每当有朋友问起怎么快速建站,我还是会毫不犹豫地推荐 Django。尤其当你面对的是运营同学那种“今天提需求,明早就要上线”的节奏时——Java 显然太重了,而 Django 正好轻快又稳。
别怕,Django 没你想的那么难
很多新手一听到“Web框架”就慌,觉得肯定要配Nginx、调数据库连接池、处理跨域……其实 Django 的哲学就是 Don’t Repeat Yourself (DRY) 和 Convention over Configuration。它把90%的脏活累活都给你包好了,你只需要专注业务逻辑。
举个栗子🌰:你想做一个“用户留言本”网站(别笑,这可是每个程序员的Hello World进阶版)。用 Java Spring Boot,你可能要:
- 写 Entity、Repository、Service、Controller
- 配置 DataSource、JPA、Transaction
- 处理 JSON 序列化、异常拦截……
而在 Django 里?三步走:
- 定义模型(Model)
- 写视图(View)
- 配路由(URL)
剩下的——数据库迁移、Admin后台、表单验证、CSRF防护……全送你!
动手:5分钟跑起你的第一个Django站点
💡 环境要求:Python ≥ 3.8(别用2.7了,真的,2024年了)
# 创建虚拟环境(强烈建议!别污染全局)
python -m venv mysite_env
source mysite_env/bin/activate # Linux/Mac
# mysite_env\Scripts\activate # Windows
# 安装Django
pip install django
# 创建项目
django-admin startproject mysite
cd mysite
# 启动开发服务器
python manage.py runserver
浏览器打开 http://127.0.0.1:8000,看到那个火箭🚀页面了吗?恭喜,你已经跑起了一个完整的 Web 服务!比某些 Java 项目启动时间还快(手动狗头)。
加点料:做个真正的“留言本”
现在我们来加个功能:让用户能提交留言,并在首页显示所有留言。
第一步:创建App(Django里的模块单位)
python manage.py startapp guestbook
然后在 mysite/settings.py 的 INSTALLED_APPS 里加上 'guestbook':
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
# ... 其他默认项
'guestbook', # ← 加这一行
]
第二步:定义数据模型
编辑 guestbook/models.py:
from django.db import models
class Message(models.Model):
name = models.CharField("姓名", max_length=50)
content = models.TextField("留言内容")
created_at = models.DateTimeField("创建时间", auto_now_add=True)
def __str__(self):
return f"{self.name}: {self.content[:20]}..." # 方便Admin里看
📌 这里我特意加了中文 verbose_name,因为运营同学将来可能会用 Admin 后台看数据(他们可看不懂
content是啥意思)。
第三步:生成数据库迁移并执行
python manage.py makemigrations
python manage.py migrate
这时候 SQLite 数据库(默认)里就有 guestbook_message 表了。别小看 SQLite,我线上有个小工具站跑了两年,日活几百,照样稳如老狗。
第四步:写视图和模板
先写视图 guestbook/views.py:
from django.shortcuts import render, redirect
from .models import Message
from .forms import MessageForm # 等下定义
def index(request):
if request.method == "POST":
form = MessageForm(request.POST)
if form.is_valid():
form.save()
return redirect("index") # 提交后刷新页面
else:
form = MessageForm()
messages = Message.objects.all().order_by("-created_at")
return render(request, "guestbook/index.html", {
"form": form,
"messages": messages
})
再定义表单 guestbook/forms.py(Django 的表单超好用!自动校验+渲染):
from django import forms
from .models import Message
class MessageForm(forms.ModelForm):
class Meta:
model = Message
fields = ["name", "content"]
widgets = {
"content": forms.Textarea(attrs={"rows": 4})
}
模板 guestbook/templates/guestbook/index.html(注意目录层级!):
<!DOCTYPE html>
<html>
<head>
<title>我的留言本</title>
</head>
<body>
<h1>欢迎留言!</h1>
<!-- 提交表单 -->
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">提交</button>
</form>
<hr>
<h2>已有留言:</h2>
{% for msg in messages %}
<p><strong>{{ msg.name }}</strong> 说:<br>{{ msg.content }}</p>
<small>{{ msg.created_at|date:"Y-m-d H:i" }}</small>
<hr>
{% empty %}
<p>还没有留言哦~</p>
{% endfor %}
</body>
</html>
第五步:配置URL路由
guestbook/urls.py(新建):
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
]
mysite/urls.py(主路由):
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path("admin/", admin.site.urls),
path("", include("guestbook.urls")), # ← 挂载子路由
]
启动!顺便看看Django Admin有多香
运行:
python manage.py createsuperuser # 创建管理员账号
python manage.py runserver
访问 http://127.0.0.1:8000/admin,用刚创建的账号登录——哇!你的 Message 模型自动有了增删改查界面!运营同学可以直接在这里管理留言,根本不用你写额外接口。
这要是用 Java,你得额外搭个 Vue 前端 + REST API + 权限控制……想想就头大。
生产环境?别慌,Django 也能扛
我知道你在想:“这不就是玩具吗?线上能用?” —— 我去年帮一个客户做的内部审批系统,就是 Django + PostgreSQL + Gunicorn + Nginx,日均请求 5w+,CPU 占用不到 30%。
关键配置建议:
| 组件 | 开发环境 | 生产环境 |
|---|---|---|
| 数据库 | SQLite | PostgreSQL / MySQL |
| Web 服务器 | runserver | Gunicorn + Nginx |
| 静态文件 | Django 自带 | CDN 或 Nginx 托管 |
| DEBUG | True | False(必须!) |
| SECRET_KEY | 随便写 | 用环境变量,别硬编码 |
特别提醒:永远不要在线上开 DEBUG=True!否则你的数据库密码、服务器路径全暴露(别问我怎么知道的,那次事故让我请全组喝了三天奶茶)。
为什么我不用 Java 做这种事?
不是黑 Java,我至今仍觉得 Spring Boot 是企业级应用的王者。但如果你的需求是:
- 快速验证 MVP
- 内部工具/运营活动页
- 小型 SaaS 产品
那 Python + Django 的开发效率真的吊打 Java。一个功能,Java 团队可能要开三次会、写 200 行样板代码,而我一个人在家撸两小时就上线了——还能准时去遛狗。
而且 Django 社区生态丰富:用户认证、REST API(DRF)、任务队列(Celery)、缓存(Redis)……全都有成熟方案。代码可读性也高,几个月后回头看,依然知道自己当初在写什么(对比某些 Java 项目的三层嵌套泛型……)
最后一点真心话
作为远程开发者,我最怕的就是“重复造轮子”和“过度设计”。Django 让我能把精力放在真正重要的事上——比如怎么让运营小姐姐少找我改需求(开玩笑的)。
如果你也厌倦了被复杂架构绑架,想快速做出一个能跑、能用、还能维护的网站,那就试试 Django 吧。它可能不够“酷”,但绝对够“稳”。
对了,文开头那个老同事的活动页,我昨晚帮他搭好了。他发来消息:“牛啊!比我们 Java 后端快多了!” —— 我回了个 😏,然后关掉电脑,去煮泡面了。
毕竟,自由开发者的生活,代码写完就得及时奖励自己,不然容易抑郁(真的,别问我是怎么知道的)。
📌 小贴士:完整代码我放 GitHub 了(搜
django-guestbook-tutorial),记得 star!有问题欢迎 issue,但别半夜 @ 我,我得睡觉(远程工作也要 work-life balance 啊!)

评论 0