从零开始,用 Django 搭建你的第一个网站 —— 我的实战经验分享

完美探险家
2025-06-27 03:00
阅读 265

起因:为什么我会选择用 Django 做第一个项目?

起因:为什么我会选择用 Django 做第一个项目?

去年初,我刚转行做后端开发不久,在公司接到一个内部工具的搭建任务。这个工具主要是用来管理我们部门的一些日常数据,比如项目进度、资源分配、团队沟通记录等。虽然需求并不复杂,但对于我这个新手来说,如何快速搭建一个可用、稳定且易于维护的系统是个不小的挑战。

在技术选型上,我最初考虑过一些传统的 Java 或 PHP 框架,但考虑到项目规模小、迭代速度快、团队人数有限,再加上自己对 Python 比较熟悉,于是决定尝试使用 Django 来完成这个项目。

事实证明,这是一个非常明智的选择。

今天我就想结合这个项目的经验,手把手带大家用 Django 搭建一个简单的网站,顺便也聊聊我在实际工作中踩过的坑和学到的经验。


项目背景与功能需求简述

项目背景与功能需求简述

我们这个内部工具的核心功能其实很简单:

  • 用户登录/注册
  • 项目列表展示
  • 新增/编辑/删除项目信息
  • 记录每个项目的操作日志

说白了就是一个简单的 CRUD(创建、读取、更新、删除)系统。但即便如此,在开发过程中也遇到了不少问题,尤其是在权限控制、数据库设计和部署方面。接下来的内容,我会以这个项目为基础,一步步带你从零开始用 Django 实现这些功能。


开发环境准备与初始化项目

开发环境准备与初始化项目

首先,我们需要准备一下开发环境。这里我强烈建议你使用虚拟环境(virtual environment),这样可以避免不同项目之间的依赖冲突。

# 创建并激活虚拟环境
python3 -m venv venv
source venv/bin/activate    # Linux/macOS
venv\Scripts\activate       # Windows

安装 Django:

pip install django

验证是否安装成功:

django-admin --version

接下来创建我们的项目:

django-admin startproject mysite
cd mysite

结构如下:

mysite/
├── manage.py
└── mysite/
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

启动开发服务器看看效果:

python manage.py runserver

访问 http://127.0.0.1:8000,应该就能看到熟悉的 Django 欢迎页面啦!


搭建第一个应用:项目管理模块

Django 的设计理念是“项目包含多个应用”,所以我们需要先创建一个属于我们自己的应用模块。

执行以下命令:

python manage.py startapp project_manager

现在目录中会多出一个 project_manager 文件夹。别忘了把这个 app 注册到项目中去:

打开 mysite/settings.py,在 INSTALLED_APPS 中添加:

'project_manager.apps.ProjectManagerConfig',

设计模型(Model)—— 数据库表结构的定义

接下来我们来设计数据库模型。Django 使用 ORM(对象关系映射)的方式让我们可以不用直接写 SQL 就能操作数据库,这对于我这种刚开始接触数据库的人来说简直是天降福音。

我们先来定义两个主要的模型:ProjectLogEntry

# project_manager/models.py
from django.db import models
from django.contrib.auth.models import User

class Project(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField(blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

class LogEntry(models.Model):
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    action = models.CharField(max_length=50)
    timestamp = models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)

    def __str__(self):
        return f"{self.user} {self.action} project '{self.project}' at {self.timestamp}"

这段代码定义了两个表:

  • Project:表示项目的基本信息
  • LogEntry:记录用户对项目执行的操作,如创建、修改等

保存完之后,记得执行数据库迁移:

python manage.py makemigrations
python manage.py migrate

这时 Django 会在本地创建 SQLite 数据库文件,并生成对应的表结构。


管理后台配置:快速上手内容管理

Django 自带了一个强大的管理后台,我们可以利用它来查看和管理我们的数据。

首先,创建超级管理员账号:

python manage.py createsuperuser

然后,我们需要将我们的模型注册进后台:

# project_manager/admin.py
from django.contrib import admin
from .models import Project, LogEntry

admin.site.register(Project)
admin.site.register(LogEntry)

重启服务后访问 /admin,用刚才创建的账号登录进去,就可以看到我们的两张表了!


开发视图(View)和模板(Template):展示前端界面

接下来我们来实现项目的首页列表展示。

编写视图函数

# project_manager/views.py
from django.shortcuts import render
from .models import Project

def project_list(request):
    projects = Project.objects.all()
    return render(request, 'project_list.html', {'projects': projects})

配置 URL 路由

# project_manager/urls.py(如果没有则新建)
from django.urls import path
from . import views

urlpatterns = [
    path('', views.project_list, name='project_list'),
]

然后在主项目的 URL 中包含这个 app 的路由:

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('projects/', include('project_manager.urls')),
]

创建 HTML 模板

project_manager 目录下新建一个 templates 文件夹,然后在里面新建 project_list.html

<!-- project_manager/templates/project_list.html -->
<!DOCTYPE html>
<html>
<head>
    <title>项目列表</title>
</head>
<body>
    <h1>项目列表</h1>
    <ul>
    {% for project in projects %}
        <li>{{ project.name }} - {{ project.description }}</li>
    {% endfor %}
    </ul>
</body>
</html>

微服务架构示意图-1

访问 http://127.0.0.1:8000/projects/,你应该能看到所有项目都列出来了!


登录认证机制:限制访问权限

接下来我们希望只有登录的用户才能看到项目列表。Django 提供了非常方便的装饰器来实现这一点:

# project_manager/views.py
from django.contrib.auth.decorators import login_required

@login_required
def project_list(request):
    ...

这时候如果没登录,就会跳转到登录页面,默认路径是 /accounts/login/,你需要手动设置这个页面或者使用 Django 自带的认证模块。


表单处理:新增和编辑项目信息

为了能让用户新增项目,我们要做一个简单的表单提交功能。

首先,定义一个表单类:

# project_manager/forms.py
from django import forms
from .models import Project

class ProjectForm(forms.ModelForm):
    class Meta:
        model = Project
        fields = ['name', 'description']

接着编写新增项目的视图:

# project_manager/views.py
from django.shortcuts import redirect
from .forms import ProjectForm

@login_required
def project_create(request):
    if request.method == "POST":
        form = ProjectForm(request.POST)
        if form.is_valid():
            project = form.save()
            LogEntry.objects.create(
                project=project,
                action="created",
                user=request.user
            )
            return redirect('project_list')
    else:
        form = ProjectForm()

    return render(request, 'project_form.html', {'form': form})

添加 URL 路由:

path('new/', views.project_create, name='project_create'),

再创建模板:

<!-- project_manager/templates/project_form.html -->
<h1>新建项目</h1>
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">提交</button>
</form>

这样,用户就可以通过访问 /projects/new/ 来新增项目了,同时还会记录日志。


踩过的坑与解决经验总结

坑一:静态文件加载失败

在我刚上线项目时,发现 CSS 样式完全没加载。后来才知道是因为没有正确配置静态文件目录。

解决方案

确保 settings.py 中有如下配置:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

运行收集静态文件命令:

python manage.py collectstatic

如果是生产环境,还需要配合 Nginx 做静态文件代理。


坑二:数据库性能问题

随着数据量增长,我发现页面加载速度明显变慢,尤其是日志查询的部分。

解决方案

  1. 给常用字段加上索引,例如 LogEntry 中的 project 字段;
  2. 使用 Django 的缓存中间件,缓存某些不常变动的页面;
  3. 使用 select_related()prefetch_related() 减少数据库查询次数;
  4. 后期迁移到 PostgreSQL 并引入 Redis 缓存。

坑三:部署上线遇到各种兼容性问题

第一次把项目部署到线上服务器时,出现了各种问题:数据库连接不上、静态文件缺失、Python 版本不一致……

解决方案

  1. 使用 Docker 打包整个项目环境,保证本地和线上一致;
  2. 在服务器使用 gunicorn + nginx 作为生产级部署方案;
  3. whitenoise 处理静态文件;
  4. 使用 Git 配合 CI/CD 工具自动化部署流程。

总结:Django 是一个快速构建后端系统的利器

数据流转过程-2

通过这个项目,我深刻体会到 Django 的强大之处:

  • 快速搭建原型,适合 MVP(最小可行产品)场景;
  • 内置管理后台节省大量开发时间;
  • ORM 和认证体系成熟,开箱即用;
  • 社区活跃,文档丰富,遇到问题基本都能找到答案。

当然,如果你的项目未来需要更高的并发性能或更复杂的架构设计,Django 也不是万能药,可以逐步拆分为微服务架构,结合 Celery、Redis、PostgreSQL、Elasticsearch 等工具一起使用。


给新人的一些建议

  1. 不要怕试错,Django 的文档和社区就是你最好的老师
  2. 项目初期尽量保持简单,避免过度设计
  3. 数据库设计要慎重,后期调整成本很高
  4. 尽早引入测试,Django 测试框架非常好用
  5. 部署前务必模拟生产环境,避免线上翻车

最后,附上 GitHub 示例源码地址(仅供学习参考)

为了方便大家理解,我把这个项目上传到了 GitHub,大家可以 fork 下来看看完整的实现方式:

👉 https://github.com/yourusername/django-sample-project(示例链接,请替换为你自己的仓库)


结语

从一个只会 Hello World 的小白,到现在能独立搭建一个可以上线的系统,这一路走下来确实不容易。但正是通过这些真实的项目实践,让我真正理解了后端开发的本质。

Django 可能不是最快的框架,但它一定是帮你最快把想法变成现实的那一个。

如果你刚开始学习后端开发,不妨试试 Django,也许你会发现编程的乐趣比你想象的要多得多。

评论 0

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