Django入门教程:搭建你的第一个Python网站
大家好,我是一名从培训班出来的前端开发者,但因为在工作中经常和后端打交道,也自学了不少后端知识。我当初学Django的时候,最大的困惑不是代码怎么写,而是“为什么要这样设计?”——比如为什么要有视图、模型、模板?它们之间的关系到底是什么?今天我就以一个“过来人”的身份,用最直白的方式,带零基础的你搭建人生第一个Python网站,并在过程中融入一些架构设计的思考。
💡 本文也会回应一个常见的疑问:既然有 Go 这样高性能的后端语言,为什么还要学 Django?答案其实在“综合”二字中。
一、Django 是什么?能做什么?
Django 是一个用 Python 编写的 Web 框架。你可以把它理解为一套“搭积木”的工具箱,帮你快速构建网站后台(比如用户登录、文章发布、订单管理等)。
- 它内置了数据库操作、用户认证、URL路由等常用功能。
- 强调 “约定优于配置” —— 按照它的规则来,你能少写很多重复代码。
- 虽然 Go 语言在高并发场景下性能更强,但 Django 的优势在于 开发速度快、生态成熟、适合中小型项目快速上线。这就是“综合”能力的体现。
✅ 简单说:Go 像跑车,快但需要高超驾驶技术;Django 像家用车,省心省力,适合大多数人。
二、环境准备:5 分钟搭好开发环境
步骤 1:安装 Python(3.7+)
去 python.org 下载最新版,安装时记得勾选 “Add to PATH”。
验证安装:
python --version
# 应输出类似 Python 3.10.12
步骤 2:创建虚拟环境(避免包冲突)
# 创建项目文件夹
mkdir mysite && cd mysite
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境(Windows)
venv\Scripts\activate
# 激活虚拟环境(Mac/Linux)
source venv/bin/activate
步骤 3:安装 Django
pip install django
验证:
django-admin --version
# 输出版本号即成功
⚠️ 新手常见问题:
Q:为什么一定要用虚拟环境?
A:就像不同项目用不同版本的 Go module 一样,Python 项目也需要隔离依赖。否则 A 项目用 Django 4.0,B 项目用 3.2,就会打架!
三、核心概念:MVT 架构 vs MVC
Django 采用 MVT(Model-View-Template) 架构:
| 组件 | 作用 | 类比(前端视角) |
|---|---|---|
| Model | 定义数据结构(如用户、文章) | 类似数据库表结构 |
| View | 处理业务逻辑,返回响应 | 类似 Express.js 的路由处理器 |
| Template | 渲染 HTML 页面 | 类似 React 组件(但更简单) |
🧠 架构设计思考:
为什么 Django 不叫 MVC?因为它的 “View” 实际上是 MVC 中的 “Controller”,而 “Template” 才是真正的 View。这种命名虽然容易混淆,但强制分离数据、逻辑和界面,让代码更易维护——这是很多新手忽略的工程价值。
四、实战:搭建一个“今日算法推荐”网站
我们要做一个简单的网站,每天随机推荐一道算法题(比如来自 LeetCode)。
第 1 步:创建 Django 项目
django-admin startproject mysite .
注意末尾的
.,表示在当前目录创建。
目录结构:
mysite/
├── manage.py
├── mysite/
│ ├── __init__.py
│ ├── settings.py # 配置文件
│ ├── urls.py # 总路由
│ └── wsgi.py
第 2 步:创建 App(功能模块)
python manage.py startapp algo
💡 一个 Django 项目 = 多个 App 的集合。比如电商网站可能有
user、product、order等 App。
第 3 步:注册 App
编辑 mysite/settings.py,在 INSTALLED_APPS 中加入:
INSTALLED_APPS = [
'django.contrib.admin',
# ... 其他默认项
'algo', # ← 加这一行
]
第 4 步:定义 Model(数据)
编辑 algo/models.py:
from django.db import models
class AlgorithmProblem(models.Model):
title = models.CharField(max_length=100)
description = models.TextField()
difficulty = models.CharField(max_length=20) # easy / medium / hard
def __str__(self):
return self.title
第 5 步:生成并执行数据库迁移
python manage.py makemigrations
python manage.py migrate
🔁 迁移 = 把 Python 代码转成 SQL 语句,自动创建数据库表。
第 6 步:创建视图(View)
编辑 algo/views.py:
from django.shortcuts import render
import random
from .models import AlgorithmProblem
def daily_recommendation(request):
all_problems = AlgorithmProblem.objects.all()
if not all_problems:
problem = {"title": "暂无题目", "description": "请先添加题目!"}
else:
problem = random.choice(all_problems)
return render(request, 'algo/recommend.html', {'problem': problem})
🎯 这里用到了
random模块做简单“算法”——随机选择。虽不复杂,但体现了业务逻辑与数据获取的分离。
第 7 步:配置 URL 路由
- 在
algo/目录下新建urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('', views.daily_recommendation, name='daily'),
]
- 修改主路由
mysite/urls.py:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('algo.urls')), # ← 包含子路由
]
第 8 步:创建模板(Template)
- 在
algo/下新建文件夹templates/algo/ - 创建
templates/algo/recommend.html:
<!DOCTYPE html>
<html>
<head>
<title>今日算法推荐</title>
</head>
<body>
<h1>{{ problem.title }}</h1>
<p>难度: {{ problem.difficulty }}</p>
<p>{{ problem.description }}</p>
</body>
</html>
✨ Django 模板语法:
{{ variable }}用于插入变量,非常直观。
第 9 步:启动服务器
python manage.py runserver
访问 http://127.0.0.1:8000,看到页面说明成功!
❗ 但目前没有数据!怎么办?
第 10 步:用 Django Admin 添加测试数据
- 创建超级用户:
python manage.py createsuperuser
# 按提示输入用户名、邮箱、密码
- 注册 Model 到 Admin:编辑
algo/admin.py
from django.contrib import admin
from .models import AlgorithmProblem
admin.site.register(AlgorithmProblem)
- 启动服务器,访问
http://127.0.0.1:8000/admin,登录后即可添加算法题目。
五、新手常见问题解答
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 页面显示空白或 404 | URL 路由没配对 | 检查 urls.py 是否 include 子路由 |
| 模板找不到 | templates 目录结构错误 | 必须是 app/templates/app/xxx.html |
| 修改代码不生效 | 开发服务器未重启 | 修改 Python 文件后需重启 runserver |
| 数据库报错 | 未执行 migrate | 确保运行 makemigrations 和 migrate |
💬 我当初卡最久的是模板路径——Django 默认只找
app/templates/下的内容,如果你把 HTML 放在根目录,它就是找不到!
六、学习建议:下一步怎么走?
- 深入理解 ORM:Django 的
Model.objects.filter()背后是强大的查询系统,比手写 SQL 更安全。 - 学习 REST API:用 Django REST framework 把你的网站变成前后端分离的 API 服务。
- 对比其他框架:试试 Flask(更轻量)、FastAPI(异步),甚至 Go 的 Gin 框架,理解不同语言在 Web 开发中的“综合”权衡。
- 不要忽视算法:虽然 Django 帮你处理了大部分 CRUD,但业务逻辑中仍需算法思维(比如推荐系统、排序、搜索)。
最后提醒:不要一开始就追求“高性能”或“微服务”。先用 Django 把功能跑通,理解 Web 开发的全貌,再考虑优化。我见过太多新手一上来就想用 Go 重写一切,结果连 HTTP 请求都没搞明白。
现在,你已经拥有了一个可运行的 Python 网站!哪怕它只是随机推荐一道算法题,但你已经迈出了后端开发的第一步。记住:所有复杂的系统,都是从 Hello World 开始的。
祝你编码愉快!

评论 0