Django入门教程:搭建你的第一个Python网站(一个想跳槽的Java程序员的自白)

陈庆林
2025-12-16 14:44
阅读 440

上周五晚上,又双叒叕加班到九点多。
我瘫在工位上,盯着屏幕里熟悉的 Spring Boot 项目结构发呆——application.yml@RestControllerJPA Repository……这些玩意儿我已经写了快两年了。说熟悉吧,确实熟得能闭眼写;说厌倦吧,倒也不至于,但总感觉……少了点新鲜感。

最近刷脉脉和BOSS直聘有点频繁。不是公司不好(我们组氛围其实挺佛系,PM 也从不半夜改需求),而是看着外面 Python 岗、Django 岗薪资蹭蹭涨,再看看自己每天在 Java 的“稳如老狗”生态里修 Bug、调 GC、陪测试对日志……心里难免嘀咕:要不,试试换个赛道?

于是,周末起了个大早(毕竟我是8点就开工的早起型选手),泡了杯美式,打开终端,决定亲手搭一个 Django 网站——就当是给自己投简历前练练手,顺便看看 Python Web 开发到底是不是传说中的“优雅又高效”。


为什么是 Django?而不是继续卷 Spring Boot?

我知道,很多 Java 同学会说:“Spring Boot 不香吗?微服务、链路追踪、Sentinel 熔断,啥都有!”
没错,Spring Boot 在企业级开发中确实稳如泰山,尤其在高并发、强事务场景下,Java 的 JVM 生态依然无敌。

但!作为一个喜欢折腾新技术的人,我早就对 Python 的简洁语法和快速原型能力心向往之。尤其是看到不少创业公司、AI 团队、甚至内部工具平台都在用 Django 快速上线 MVP,我就更心动了。

而且说实话,现在求职市场上,“会 Python”已经快成标配了。就算你主攻 Java,如果能顺带写个 Flask/Django 后台,面试官眼睛都会亮一下。多一门技能,就多一条退路嘛。


动手!5分钟跑起你的第一个 Django 站点

先别想什么数据库、REST API、用户认证——咱们先让“Hello World”跑起来,建立信心最重要。

第一步:环境准备(别被 virtualenv 劝退)

# 创建虚拟环境(强烈建议!别污染全局)
python3 -m venv mysite_env
source mysite_env/bin/activate  # Linux/Mac
# Windows 用户用:mysite_env\Scripts\activate

# 安装 Django(当前最新稳定版是 4.x)
pip install django

📌 踩坑提醒:我第一次装的时候没开虚拟环境,结果和系统里另一个项目的依赖冲突,直接报 ImportError: cannot import name 'six'。当时真的想砸键盘——后来才知道是旧版 Django 和新包打架。所以,虚拟环境不是可选项,是保命符!

第二步:创建项目 & 启动服务器

django-admin startproject mysite
cd mysite
python manage.py runserver

浏览器打开 http://127.0.0.1:8000,看到那只可爱的火箭图标了吗?恭喜,你的第一个 Django 应用跑起来了!

这时候我忍不住对比了一下 Spring Boot:

  • Java 新建一个 Spring Boot 项目:打开 IDEA → 选 Spring Initializr → 勾一堆依赖 → 等 Maven 下载 → 写个 @SpringBootApplication → 启动
  • Django:三行命令,搞定

效率差距,立竿见影。 当然,这不代表 Django 更“高级”,只是定位不同——Django 是“开箱即用”的全栈框架,而 Spring Boot 更像是“乐高积木”,自由度高但组装费时。


加点料:做个简单的博客首页(带数据库)

光有 Hello World 显然不够面试用。咱们来搞个带数据库的简单模型——比如一个文章列表页。

定义 Model(相当于 JPA Entity)

mysite/mysite/settings.py 里确认数据库配置(默认用 SQLite,开发够用):

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

然后新建一个 app(Django 的模块化单位):

python manage.py startapp blog

blog/models.py 中定义文章模型:

from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

接着注册这个 app 到 settings.py

INSTALLED_APPS = [
    # ...
    'blog',
]

生成并执行迁移:

python manage.py makemigrations
python manage.py migrate

💡 生产环境提示:线上千万别用 SQLite!一般换 PostgreSQL 或 MySQL。Django 对主流数据库支持都很好,切换只需改几行配置。

写个 View(相当于 Controller)

blog/views.py

from django.shortcuts import render
from .models import Article

def article_list(request):
    articles = Article.objects.all().order_by('-created_at')
    return render(request, 'blog/list.html', {'articles': articles})

配置 URL 路由

主项目 urls.py

from django.contrib import admin
from django.urls import path, include

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

blog/urls.py(新建):

from django.urls import path
from . import views

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

模板渲染(类似 Thymeleaf)

创建模板目录 blog/templates/blog/list.html

<!DOCTYPE html>
<html>
<head>
    <title>我的博客</title>
</head>
<body>
    <h1>最新文章</h1>
    {% for article in articles %}
        <div>
            <h2>{{ article.title }}</h2>
            <p>{{ article.content|truncatewords:20 }}</p>
            <small>{{ article.created_at }}</small>
        </div>
    {% empty %}
        <p>暂无文章</p>
    {% endfor %}
</body>
</html>

最后,用 Django 自带的 admin 后台加几篇文章测试:

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

访问 http://127.0.0.1:8000/admin,登录后就能看到 Articles 表,手动添加数据。

刷新首页,文章列表出来了!🎉


对比 Spring Boot:架构与开发体验差异

为了更直观,我整理了个小表格:

维度 Django Spring Boot (Java)
启动速度 极快(秒级) 较慢(依赖加载 + JVM 预热)
代码量 少(约定优于配置) 多(注解、配置类、DTO 层)
数据库操作 ORM 内置(QuerySet 超好用) 需 JPA/MyBatis,配置稍繁琐
部署复杂度 中等(需 WSGI 服务器如 Gunicorn) 高(需打包 jar/war,配 Tomcat 或内嵌)
类型安全 弱(动态语言) 强(编译期检查)
适合场景 快速原型、中小型应用、内部工具 大型企业系统、高并发、强一致性

说真的,Django 的 ORM 让我惊呆了。
比如查最近7天的文章,在 Java 里可能要写个 @Query("SELECT a FROM Article a WHERE a.createdAt > :sevenDaysAgo"),而在 Django 只需:

from datetime import timedelta
from django.utils import timezone

recent_articles = Article.objects.filter(
    created_at__gte=timezone.now() - timedelta(days=7)
)

链式调用 + 直观的字段过滤,简直丝滑。 虽然没有编译期检查让我有点不安(老 Java 人 PTSD),但开发效率确实高。


求职视角:学 Django 对跳槽有帮助吗?

回到最初的问题——值不值得花时间学?

我的结论是:如果你是 Java 后端,想拓宽技术栈或转向 AI/数据分析相关岗位,Django 绝对值得投入。

现在很多公司招“全栈”或“Python 后端”,其实核心要求就是:

  • 能用 Django/Flask 写 RESTful API
  • 熟悉 ORM 和数据库优化
  • 会部署(Nginx + Gunicorn + Supervisor)
  • 最好懂点 Celery 做异步任务

这些技能,通过做一个完整的小项目基本都能覆盖。而且 Django 的文档堪称业界良心,遇到问题基本搜一下就有答案。

上周我还拿这个小博客项目去面了一家做 SaaS 的 startup,面试官看到我用 Django Admin 快速实现内容管理,直接夸“上手很快”。虽然最后因为薪资没谈拢没去,但至少证明:多语言能力,真的能加分。


写在最后:迷茫期的技术投资

干了快两年,我越来越觉得,技术人的安全感,不来自某个框架,而来自快速学习和解决问题的能力。

Spring Boot 让我学会了工程化思维和系统稳定性设计,而 Django 教会我如何用最少代码达成目标。两者并不冲突,反而互补。

所以,如果你也在纠结要不要跳槽、要不要学新东西——别想太多,先动手做一个小项目。哪怕最后没换工作,这段经历也会让你在下次周会上,面对 PM 的“能不能下周上线这个功能?”时,多一份底气说:“行,我试试用 Django 快速搭个原型。”

毕竟,程序员的世界里,能跑起来的代码,永远比完美的计划更有说服力。


附:常用命令速查

# 创建项目
django-admin startproject project_name

# 创建 app
python manage.py startapp app_name

# 数据库迁移
python manage.py makemigrations
python manage.py migrate

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

# 创建超级用户(用于 admin)
python manage.py createsuperuser

祝大家 coding 顺利,跳槽成功,早日摆脱“需求变更永动机”的折磨!

评论 0

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