Django入门教程:搭建你的第一个Python网站(一个想跳槽的Java程序员的自白)
上周五晚上,又双叒叕加班到九点多。
我瘫在工位上,盯着屏幕里熟悉的 Spring Boot 项目结构发呆——application.yml、@RestController、JPA 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