Django入门教程:搭建你的第一个Python网站

贪心没贪够
2025-12-15 01:48
阅读 747

大家好,我是一名从培训班出来的前端开发者,但因为在工作中经常和后端打交道,也自学了不少后端知识。我当初学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 的集合。比如电商网站可能有 userproductorder 等 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 路由

  1. algo/ 目录下新建 urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.daily_recommendation, name='daily'),
]
  1. 修改主路由 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)

  1. algo/ 下新建文件夹 templates/algo/
  2. 创建 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 添加测试数据

  1. 创建超级用户:
python manage.py createsuperuser
# 按提示输入用户名、邮箱、密码
  1. 注册 Model 到 Admin:编辑 algo/admin.py
from django.contrib import admin
from .models import AlgorithmProblem

admin.site.register(AlgorithmProblem)
  1. 启动服务器,访问 http://127.0.0.1:8000/admin,登录后即可添加算法题目。

五、新手常见问题解答

问题 原因 解决方案
页面显示空白或 404 URL 路由没配对 检查 urls.py 是否 include 子路由
模板找不到 templates 目录结构错误 必须是 app/templates/app/xxx.html
修改代码不生效 开发服务器未重启 修改 Python 文件后需重启 runserver
数据库报错 未执行 migrate 确保运行 makemigrationsmigrate

💬 我当初卡最久的是模板路径——Django 默认只找 app/templates/ 下的内容,如果你把 HTML 放在根目录,它就是找不到!


六、学习建议:下一步怎么走?

  1. 深入理解 ORM:Django 的 Model.objects.filter() 背后是强大的查询系统,比手写 SQL 更安全。
  2. 学习 REST API:用 Django REST framework 把你的网站变成前后端分离的 API 服务。
  3. 对比其他框架:试试 Flask(更轻量)、FastAPI(异步),甚至 Go 的 Gin 框架,理解不同语言在 Web 开发中的“综合”权衡。
  4. 不要忽视算法:虽然 Django 帮你处理了大部分 CRUD,但业务逻辑中仍需算法思维(比如推荐系统、排序、搜索)。

最后提醒:不要一开始就追求“高性能”或“微服务”。先用 Django 把功能跑通,理解 Web 开发的全貌,再考虑优化。我见过太多新手一上来就想用 Go 重写一切,结果连 HTTP 请求都没搞明白。


现在,你已经拥有了一个可运行的 Python 网站!哪怕它只是随机推荐一道算法题,但你已经迈出了后端开发的第一步。记住:所有复杂的系统,都是从 Hello World 开始的。

祝你编码愉快!

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝