Django入门教程:搭建你的第一个Python网站
去年十月的一个雨夜,我蜷缩在天通苑那间3500块一个月的出租屋里,窗外是滴滴答答的雨声和远处地铁13号线末班车驶过的轰鸣。桌上摆着一碗已经凉透的泡面,显示器上闪烁着一堆报错信息——那是我第一次尝试用Django搭网站,结果连runserver都跑不起来。
那时的我,刚从一所二本院校毕业一年,在一家小外包公司写着没人看的Java CRUD代码,月薪15k,房租占了将近四分之一。女朋友(现在是我老婆)坐在床边刷剧,突然问我:“你不是说要学新东西涨工资吗?怎么又在折腾这个?”
我苦笑:“这叫技术债提前还,万一哪天被裁了,还能靠Python混口饭吃。”
为什么一个Java程序员要去碰Django?
说实话,一开始我根本没打算碰Python。我们组全是Java栈,Spring Boot、MyBatis、Redis,一套打天下。但有一次和前同事吃饭,他跳槽去了字节做后端,聊起他们内部工具链——很多轻量级服务都是用Django写的,开发快、运维简单,甚至产品经理都能改点模板。
“你们Java人总想着造轮子,”他调侃我,“而我们Python人,能import绝不手写。”
这句话刺痛了我。我意识到,在快速验证想法、搭建MVP(最小可行产品)这件事上,Python生态真的有优势。尤其是Django——自带Admin后台、ORM、用户认证,开箱即用。对我这种白天上班、晚上只有两小时学习时间的打工人来说,省下的每一分钟都是命。
于是,我决定给自己定个小目标:用周末两天,搭出一个能跑的博客系统。
实战经验:从零开始,踩坑无数
第一步:环境配置 —— 别信网上那些“一行命令搞定”
教程里都说:
pip install django
django-admin startproject mysite
完事。
现实呢?我电脑里同时装了Python 3.8 和 3.10,virtualenv 没激活,结果把包装到了全局环境。第二天一运行,提示ModuleNotFoundError: No module named 'django'。
教训:永远用虚拟环境!我后来养成习惯:
python -m venv djangodemo
source djangodemo/bin/activate # Linux/Mac
# Windows 用户用 djangodemo\Scripts\activate
pip install django==4.2.7
第二步:创建App和模型 —— ORM真香!
我想做个简单的博客,有标题、内容、发布时间。按照官方教程,建了个blog app:
python manage.py startapp blog
然后在 models.py 里写:
from django.db import models
class Post(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
接着跑迁移:
python manage.py makemigrations
python manage.py migrate
那一刻,我惊呆了——不用写SQL!不用建表语句!Django自动帮我生成了SQLite表结构。作为一个常年和MyBatis XML文件搏斗的Java程序员,我差点感动哭。
第三步:Admin后台 —— 白嫖的力量
最让我震撼的是Django Admin。只要在admin.py注册一下:
from django.contrib import admin
from .models import Post
admin.site.register(Post)
然后创建超级用户:
python manage.py createsuperuser
访问 /admin,输入账号密码,一个功能完整的后台管理系统就出来了!增删改查、搜索、过滤全都有。我当时就想:这玩意儿要是集成到我们公司项目里,产品经理至少少提50个需求。
第四步:写视图和模板 —— 像写JSP但更优雅
我用函数视图写了个首页:
# views.py
from django.shortcuts import render
from .models import Post
def home(request):
posts = Post.objects.all().order_by('-created_at')
return render(request, 'home.html', {'posts': posts})
模板用的是Django自带的模板语言(DTL),语法类似Jinja2:
<!-- templates/home.html -->
<h1>我的博客</h1>
{% for post in posts %}
<div>
<h2>{{ post.title }}</h2>
<p>{{ post.content|truncatewords:30 }}</p>
<small>{{ post.created_at|date:"Y-m-d H:i" }}</small>
</div>
{% endfor %}
虽然比不上Thymeleaf那么“Java味”,但足够简单直接。而且|truncatewords这种过滤器,写起来比Java里手动截断字符串舒服多了。
真实场景:我把这个Demo放到了面试中
上个月面试一家中厂时,面试官问我:“除了Java,还会别的技术栈吗?”
我没吹牛,直接掏出手机:“我用Django搭了个博客,源码在GitHub,部署在Vercel上,您扫码就能看。”
他愣了一下,笑着说:“你还真搞了个能跑的?”
其实那个博客特别简陋,连评论功能都没有。但它证明了我有快速学习和交付的能力。最终,我拿到了offer,月薪22k,涨幅近50%。
HR打电话谈薪时,我正站在天通苑地铁站排队进站,信号断断续续。我说:“能不能再加1k?我房租3500,通勤每天3小时,总得有点盼头吧。”
她笑了:“你挺实在。行,23k,下周一入职。”
给初学者的几点建议(血泪总结)
别追求完美:我第一个Django项目连静态文件都没配对,CSS加载失败。但没关系,先跑起来再说。程序员最容易陷入“过度设计陷阱”,尤其是在学新技术时。
善用官方文档:Django的文档是我见过最友好的之一,例子多、逻辑清。比某些Java框架的文档强十倍(不点名批评某Spring Cloud Config)。
从小项目开始:别一上来就想做个淘宝。做个待办清单、天气查询、个人简历页就够了。关键是完成闭环——从写代码到部署上线。
别怕“不务正业”:我是Java岗,学Python会不会被说“不专注”?不会。大厂看重的是解决问题的能力,不是你死守哪门语言。况且,Python + Java 的组合在数据工程、自动化脚本场景中非常吃香。
写在最后:技术人的出路不在“专精”,而在“连接”
很多人觉得,二本出身就只能认命,卷不过985。但我想说,真正的差距不在学历,而在行动力。
我在天通苑的日子不好过。冬天暖气不稳,夏天蟑螂成群,地铁早高峰挤得像沙丁鱼罐头。但我每天逼自己学一点新东西——有时候是Docker,有时候是Redis原理,有时候就是这篇Django教程。
现在回看那个雨夜,泡面凉了又怎样?代码报错了又怎样?重要的是,我没有关掉IDE,没有躺平刷短视频,而是继续敲下去。
如果你也在二本、在小公司、在焦虑迷茫,请记住:每一个大厂程序员,都曾是个连pip install都装不明白的新手。
Python也好,Java也罢,工具只是手段。真正值钱的,是你解决问题的决心,和不断突破舒适区的勇气。
所以,别等了。打开终端,敲下:
django-admin startproject first_step
你的第一个网站,就从这里开始。
而你的第一份大厂offer,也许就在下一个commit里。

评论 0