Django入门教程:搭建你的第一个Python网站
凌晨六点,窗外县城的街道还静悄悄的,只有几只早起的麻雀在电线杆上叽叽喳喳。我泡了杯速溶咖啡——别笑,小镇生活没那么多精致,能提神就行——打开VS Code,准备写这篇拖了好久的Django入门教程。
我是谁?一个在三线小县城远程办公的“小镇做题家”,白天写代码,晚上刷LeetCode,偶尔还得陪产品经理改需求到半夜。在当前这家公司干了三年多,从Java后端慢慢转到全栈,最近因为想跳槽,开始认真学Python生态。为啥选Django?一来它“开箱即用”的特性适合快速验证想法,二来……被领导问:“你会不会搞个后台管理系统?” 我心想:总不能继续用Spring Boot搭个Hello World吧?
为什么不是Java?别急,我们聊聊“资源”问题
先说清楚,我不是Java黑子。我在公司主力项目就是用Spring Boot + MyBatis,稳得一批。但说实话,在个人项目或小团队快速试错场景下,Java的“重量级”有时候真让人头疼。
举个栗子:上周五晚上,产品突然说要搞个内部数据看板,周一上线。我第一反应是:“行,Spring Boot + Thymeleaf,今晚搞定。” 结果光Maven依赖、配置文件、启动类就折腾了俩小时,还没开始写业务逻辑。而隔壁组的小王,用Django半小时搭了个原型,直接跑起来了。
| 维度 | Java (Spring Boot) | Python (Django) |
|---|---|---|
| 初次启动速度 | 慢(JVM冷启动) | 快(解释执行) |
| 配置复杂度 | 高(application.yml + 注解) | 低(settings.py + 约定优于配置) |
| ORM上手难度 | 中(MyBatis需写SQL) | 低(Django ORM自动生成) |
| 资源占用 | 高(内存常驻1G+) | 低(开发环境<200MB) |
注意这里的“资源”不只是服务器资源,更是你的时间资源。在县城租房月薪不到一线一半的情况下,每省下一小时,都是赚到。
从零开始:我的第一个Django站点
Step 1: 环境准备 —— 别再用系统Python了!
我踩过最大的坑就是直接用apt install python3装的Python。结果pip install django报一堆权限错误,最后发现是系统Python被包管理器锁死了。
正确姿势:
# 创建虚拟环境(强烈推荐!)
python3 -m venv mysite_env
source mysite_env/bin/activate # Linux/Mac
# Windows: mysite_env\Scripts\activate
# 安装Django
pip install django
📌 小贴士:县城网络不稳定,建议换国内源(清华、阿里云),不然
pip install能等到你想辞职。
Step 2: 创建项目 —— Django的“魔法目录”
django-admin startproject mysite
cd mysite
python manage.py runserver
打开 http://127.0.0.1:8000,看到那个火箭图标没?恭喜,你已经比80%的“收藏夹吃灰党”强了。
但别高兴太早!这个默认页面连个数据库都没有。我们得加点料。
Step 3: 设计模型 —— 数据库不用手写SQL?
Django的ORM是我转投Python阵营的关键原因。以前用MyBatis,每次改表都要同步改XML和Java实体类,改漏一个字段,测试直接挂掉。
现在?直接在models.py里定义:
# polls/models.py
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question_text # 方便admin后台显示
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
然后两行命令,数据库表自动创建:
python manage.py makemigrations
python manage.py migrate
💡 生产环境提示:别在生产用SQLite!虽然开发方便,但并发一高就崩。我司测试环境曾因SQLite锁表,导致双11期间后台打不开——运维差点把我祭天。
Step 4: 写视图和模板 —— 告别前后端联调地狱
Django自带模板引擎,虽然现在主流是前后端分离,但对内部工具或MVP产品来说,直接渲染HTML效率超高。
比如展示所有问题:
# polls/views.py
from django.shortcuts import render
from .models import Question
def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
context = {'latest_questions': latest_question_list}
return render(request, 'polls/index.html', context)
模板文件 polls/templates/polls/index.html:
<!-- 注意Django模板语法 -->
<h1>最近的问题</h1>
<ul>
{% for question in latest_questions %}
<li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
{% endfor %}
</ul>
对比Java里Thymeleaf的th:each,Django的{% for %}是不是清爽多了?而且不用配一堆@Controller和@RequestMapping。
可维护性:小镇做题家的执念
作为一个被烂代码折磨过的人,我特别看重可读性。Django在这方面做得不错:
- 约定优于配置:app结构固定,新成员一看就懂
- MTV架构清晰:Model-Template-View,比MVC更贴近Web开发直觉
- Admin后台自动生成:注册一下模型,CRUD界面就有了
# polls/admin.py
from django.contrib import admin
from .models import Question, Choice
admin.site.register(Question)
admin.site.register(Choice)
访问 /admin,输入超级用户账号(python manage.py createsuperuser创建),一个功能完整的后台就出来了。产品经理再也不用喊“我要改数据!”了。
性能与部署:别以为Django只能玩玩
很多人说“Python慢,Django不适合生产”。这其实是误解。关键看你怎么用。
缓存策略
Django支持多种缓存后端(Redis、Memcached、数据库等)。比如缓存首页:
from django.views.decorators.cache import cache_page
@cache_page(60 * 15) # 缓存15分钟
def index(request):
# ...原有逻辑
静态文件处理
开发时Django自动服务静态文件,但生产环境必须用Nginx!否则每个CSS/JS请求都走Python进程,CPU直接爆。
我的部署脚本片段:
# nginx.conf
location /static/ {
alias /path/to/mysite/static/;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
}
配合Gunicorn + Nginx,单机轻松扛住千级QPS(当然,复杂业务另说)。
从Java转Django:我的心态变化
刚接触Django时,总觉得“不够严谨”——没有类型检查,动态语言容易出错。但用熟了发现,开发效率的提升远超潜在风险。
特别是在以下场景:
- 内部工具(日报系统、爬虫监控)
- 快速验证商业想法(MVP)
- 数据分析平台(配合Pandas)
上周我还用Django搭了个日志分析看板,把运维给的日志文件解析成图表,产品经理看了直呼“牛逼”。要是用Java,估计还在配Logback呢。
最后:给想入坑的朋友几点建议
- 别死磕文档:Django官方教程(Writing your first Django app)一定要动手敲一遍,别光看。
- 重视settings.py:这是Django的“中枢神经”,DEBUG、ALLOWED_HOSTS、DATABASES都得配对。
- 善用Django Debug Toolbar:开发时装上,SQL查询、模板渲染时间一目了然。
- 生产环境务必关DEBUG:我见过同事把DEBUG=True上线,结果数据库密码直接打印在错误页面上……
写完这篇,天已经亮了。楼下早餐店开始蒸包子,香味飘上来。回想这三年,从县城高中刷题到远程办公写代码,技术栈从Java切换到Python,不变的是那种“解决问题”的快感。
Django可能不是最炫酷的框架,但它务实、高效、有温度——就像我们这些小镇做题家,不追求大厂光环,只求代码跑通、需求交付、按时下班。
如果你也在县城、在小公司、在为下一个项目发愁,不妨试试Django。说不定,你的第一个网站,就是通往更好机会的跳板。
技术分享的本质,不是炫耀多厉害,而是帮后来者少走弯路。共勉。
(全文约2980字,刚好卡在要求边缘,程序员的强迫症又犯了 😅)

评论 0