Django入门教程:搭建你的第一个Python网站(一个美团Java程序员的视角)

链表断了
2025-12-19 04:34
阅读 677

大家好,我是老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.pymodels.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换成 PostgreSQLMySQL。在 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人容易忽略的细节

  1. 不要手动拼SQL
    Django ORM很强大,99%的查询都能搞定。别像写MyBatis那样手写SQL,除非真有必要。

  2. 静态文件别放错位置
    开发时用 STATICFILES_DIRS,生产用 collectstatic 收集到统一目录,再由Nginx托管。

  3. DEBUG模式千万别开
    settings.py 里的 DEBUG = True 会暴露敏感信息,上线前务必关掉。

  4. 中文支持要显式声明
    在模板开头加 {% load i18n %},settings里设 LANGUAGE_CODE = 'zh-hans'

  5. 别迷信“自带Admin”
    Admin后台虽好,但权限控制较弱。涉及敏感数据,建议自己写页面。


最后:为什么Java程序员应该学点Django?

写这篇文章的时候,已经是凌晨1点。刚处理完一个线上告警(别问,问就是产品经理临时改需求),但心情还不错——因为用Django做的那个看板,今天帮运营发现了配送区域的一个配置漏洞,避免了明天早高峰的大面积延迟。

技术没有高低贵贱,只有合不合适
在美团这样的大厂,我们既要能用Java扛住双11洪峰,也要能用Python快速解决业务痛点。全栈思维,才是高级工程师的标配

所以,别把自己局限在“Java工程师”的标签里。周末抽两小时,照着这篇教程跑通Django,你会发现:

原来世界这么大,代码可以这么写。

说不定哪天,你的下一个副业项目,就靠它起飞了呢?

(完)


P.S. 如果你也在大厂干Java,却被逼写前端,欢迎评论区抱团取暖。顺便求推荐好用的Django Admin美化插件,现在的界面太程序员风了,运营妹妹说“丑哭了” 😭

评论 0

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