Django入门教程:搭建你的第一个Python网站(一个美团Java程序员的视角)
大家好,我是老K,坐标成都,在美团外卖干了4年Java后端开发。每天8点准时到工位泡一杯浓茶,开始跟各种高并发订单、配送调度算法“搏斗”。说实话,作为一个常年和Spring Boot、Dubbo、RocketMQ打交道的Java仔,我从来没想过有一天会坐下来写一篇关于 Django 的文章。
但事情就是这么奇妙。
上个月,我们组接了个内部提效项目——要给运营同学搭个简单的数据看板,展示当天各区域的骑手在线率、订单积压情况。需求很简单,但产品经理甩过来一句话:“前端就用你们自己搞吧,别麻烦FE团队了,他们都在冲Q3大促。” 我看了一眼排期:三天上线。那一刻,我仿佛听到了键盘在哭泣。
我们组全是Java后端,前端技能基本停留在 <div>Hello World</div> 水平。要是用Spring Boot + Thymeleaf,光配Maven依赖、写Controller模板渲染就得折腾半天。而且——坦白讲,Java写这种轻量级页面,真的有点“杀鸡用牛刀”的感觉。
这时候,我突然想起去年双11期间隔壁Python组的老王,他用Django一天就搞定了一个活动配置后台。当时我还笑他:“你这玩意儿能扛住流量吗?” 他白了我一眼:“我又不是做外卖下单页,要啥高并发?快速交付才是王道!”
行吧,真香警告来得猝不及防。为了按时交差,我硬着头皮啃了两天Django文档,结果……出乎意料地丝滑。
所以今天这篇《Django入门教程》,就是想以一个资深Java工程师的身份,带大家快速上手Django,搭建你的第一个Python网站。别担心,我不讲那些花里胡哨的理论,就聚焦一件事:怎么用最短路径跑起来一个能看能点的Web应用。
为什么一个Java程序员会去碰Django?
先说清楚立场:我不是要转行Python,也不是说Django比Spring Boot牛。咱在美团做的核心交易系统,那必须是Java+高可用架构,稳如老狗。Django再快,也扛不住每秒几万单的下单压力(虽然它其实也不差,后面会说)。
但我发现,在“小快灵”的场景下,Django的生产力简直逆天。
比如:
- 内部管理后台
- 原型验证(MVP)
- 数据可视化看板
- 个人博客/作品集网站
这些场景不需要复杂的微服务拆分,不需要分布式事务,甚至不需要高性能缓存。你要的是快速把想法变成可交互的页面。
而Django,正好提供了“开箱即用”的全套解决方案:
- 自带ORM(不用手写SQL)
- 自带Admin后台(连CRUD都不用写)
- 自带用户认证(登录注册现成)
- 模板引擎(前后端简单耦合,但够用)
- 开发服务器(改代码自动重启)
对比一下Java生态:你得选Spring Boot版本、配MyBatis、引入Thymeleaf或Freemarker、处理跨域、配置静态资源路径……一套流程走下来,半天没了。而Django,一行命令就能跑起一个带数据库的Web服务。
当然,如果你要做复杂前端(比如React/Vue SPA),Django也可以只当API后端,前后端分离。但今天咱们先玩“全栈一体”的经典模式,毕竟目标是快速交付。
环境准备:别被pip劝退
作为Java人,我习惯用Maven/Gradle管理依赖。Python这边是pip,一开始我还真有点不适应——没有pom.xml那种清晰的依赖树,版本冲突时直接懵圈。
但Django的安装其实超简单。前提是你装了Python(建议3.8+),然后:
# 创建虚拟环境(强烈推荐!避免污染全局)
python -m venv mysite_env
# 激活虚拟环境(Linux/Mac)
source mysite_env/bin/activate
# Windows用:mysite_env\Scripts\activate
# 安装Django
pip install Django
验证是否成功:
django-admin --version
# 输出类似:4.2.7
搞定。是不是比配JDK+IDEA+Spring Initializr快多了?
第一步:创建你的第一个Django项目
Django的项目结构很规整,有点像Maven项目的约定大于配置。
# 创建项目(注意最后有个点!)
django-admin startproject mysite .
这会在当前目录生成:
mysite/
├── manage.py # 项目管理脚本(类似mvnw)
├── mysite/
│ ├── __init__.py
│ ├── settings.py # 配置文件(相当于application.yml)
│ ├── urls.py # 总路由
│ └── wsgi.py # Web服务器接口
接着启动开发服务器:
python manage.py runserver
打开浏览器访问 http://127.0.0.1:8000,看到那个火箭图标了吗?恭喜,你的第一个Python网站跑起来了!
顺带一提,Django默认用SQLite数据库,完全不用装MySQL/PostgreSQL,对新手极其友好。当然生产环境肯定要换,后面再说。
第二步:加个页面——从“Hello World”开始
现在我们要显示点自己的东西。Django用“App”来组织功能模块(类似Maven模块)。
python manage.py startapp homepage
生成 homepage/ 目录,里面包含 views.py、models.py 等。
1. 写视图(View)
编辑 homepage/views.py:
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello, 成都的打工人!")
2. 配置URL路由
Django的路由分两层:项目总路由 + App子路由。
先在 homepage/ 下新建 urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('', views.hello, name='hello'),
]
然后在 mysite/urls.py 中引入:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('homepage.urls')), # 新增这一行
]
刷新页面,看到你的问候语了吗?是不是比写一个Spring Controller快多了?
第三步:加点“前端”——模板与静态文件
纯文本太寒酸了,我们得加HTML。Django自带模板引擎,语法类似JSP但更简洁。
1. 创建模板目录
在 homepage/ 下建 templates/homepage/,然后新建 index.html:
<!-- homepage/templates/homepage/index.html -->
<!DOCTYPE html>
<html>
<head>
<title>我的第一个Django网站</title>
<style>
body { font-family: "Helvetica Neue", sans-serif; text-align: center; padding-top: 50px; }
.container { max-width: 600px; margin: 0 auto; }
</style>
</head>
<body>
<div class="container">
<h1>🎉 Hello, {{ name }}!</h1>
<p>当前时间:{{ current_time }}</p>
</div>
</body>
</html>
注意 {{ name }} 和 {{ current_time }},这是模板变量。
2. 修改视图,传递数据
# homepage/views.py
from django.shortcuts import render
from datetime import datetime
def hello(request):
context = {
'name': '美团Java仔',
'current_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S')
}
return render(request, 'homepage/index.html', context)
render 函数会自动查找 templates/ 下的模板文件。
刷新页面,是不是有内味了?这里其实已经实现了前后端数据绑定,虽然简单,但足够应付大多数内部工具页面。
有Java同学可能会问:“这不就是Thymeleaf吗?” 差不多,但Django模板更轻量,学习成本几乎为零。
第四步:加个数据库——Django ORM真香
光展示静态数据不够用,我们得存点东西。比如让用户提交个留言。
1. 定义模型(Model)
编辑 homepage/models.py:
from django.db import models
class Message(models.Model):
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.content[:20] # 方便Admin后台显示
2. 创建并执行迁移
Django的迁移机制类似Flyway,但更自动化:
# 生成迁移文件
python manage.py makemigrations
# 执行迁移(创建表)
python manage.py migrate
控制台会输出SQL,确认表已创建。
3. 在视图中使用模型
比如加个提交留言的接口(简化版,没做校验):
# views.py
from .models import Message
def submit_message(request):
if request.method == 'POST':
content = request.POST.get('content')
Message.objects.create(content=content)
return HttpResponse("留言成功!")
return render(request, 'homepage/form.html')
对应的 form.html 就是个简单表单:
<form method="post">
{% csrf_token %}
<textarea name="content"></textarea>
<button type="submit">提交</button>
</form>
注意 {% csrf_token %},这是Django的防跨站请求伪造机制,千万别漏,否则POST会403。
生产环境考虑:别真拿开发服务器上线!
到这里,你可能觉得Django太简单了。但我要泼盆冷水:runserver 只能用于开发!
上周五晚上,实习生小张差点把测试环境搞崩——他直接用 runserver 部署了一个内部工具,结果三个同事同时访问,页面直接卡死。为啥?因为Django开发服务器是单线程、非异步的,设计初衷就是本地调试。
生产环境必须用专业WSGI服务器,比如 Gunicorn(类似Java的Tomcat):
pip install gunicorn
gunicorn mysite.wsgi:application --bind 0.0.0.0:8000
如果流量稍大,前面还得加Nginx做反向代理、静态文件缓存。
另外,数据库也得从SQLite换成 PostgreSQL 或 MySQL。在 settings.py 里改几行就行:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydb',
'USER': 'myuser',
'PASSWORD': 'mypass',
'HOST': 'localhost',
'PORT': '5432',
}
}
在美团,我们所有Python服务都跑在K8s上,用Gunicorn+Gevent,配合公司统一的日志监控体系。虽然语言不同,但基础设施是通用的。
Django vs Spring Boot:适用场景对比
作为一个Java老兵,我觉得没必要踩一捧一。关键看场景。我整理了个简单对比:
| 维度 | Django | Spring Boot |
|---|---|---|
| 上手速度 | ⚡️ 极快(1小时出原型) | 中等(需熟悉生态) |
| 高并发能力 | 中(需优化+异步) | 🔥 强(成熟方案多) |
| 生态成熟度 | 丰富(尤其Web领域) | 💪 极强(企业级全覆盖) |
| 团队技能要求 | Python基础即可 | Java+框架深度理解 |
| 适合场景 | 内部工具、MVP、博客 | 核心交易、高并发系统 |
在我们团队,Java负责“主航道”,Python/Django负责“游击队”。比如最近做的骑手行为分析看板,后端用Django提供API,前端用ECharts渲染,一周交付,运营同学直呼“神器”。
踩坑经验:Java人容易忽略的细节
不要手动拼SQL
Django ORM很强大,99%的查询都能搞定。别像写MyBatis那样手写SQL,除非真有必要。静态文件别放错位置
开发时用STATICFILES_DIRS,生产用collectstatic收集到统一目录,再由Nginx托管。DEBUG模式千万别开
settings.py里的DEBUG = True会暴露敏感信息,上线前务必关掉。中文支持要显式声明
在模板开头加{% load i18n %},settings里设LANGUAGE_CODE = 'zh-hans'。别迷信“自带Admin”
Admin后台虽好,但权限控制较弱。涉及敏感数据,建议自己写页面。
最后:为什么Java程序员应该学点Django?
写这篇文章的时候,已经是凌晨1点。刚处理完一个线上告警(别问,问就是产品经理临时改需求),但心情还不错——因为用Django做的那个看板,今天帮运营发现了配送区域的一个配置漏洞,避免了明天早高峰的大面积延迟。
技术没有高低贵贱,只有合不合适。
在美团这样的大厂,我们既要能用Java扛住双11洪峰,也要能用Python快速解决业务痛点。全栈思维,才是高级工程师的标配。
所以,别把自己局限在“Java工程师”的标签里。周末抽两小时,照着这篇教程跑通Django,你会发现:
原来世界这么大,代码可以这么写。
说不定哪天,你的下一个副业项目,就靠它起飞了呢?
(完)
P.S. 如果你也在大厂干Java,却被逼写前端,欢迎评论区抱团取暖。顺便求推荐好用的Django Admin美化插件,现在的界面太程序员风了,运营妹妹说“丑哭了” 😭

评论 0