请写一篇关于【Django入门教程:搭建你的第一个Python网站】的技术文章

写码的老王
2025-12-12 22:33
阅读 717

写于2024年6月的一个周末,杭州下着小雨,窗外是刚交房半年的小区绿化,我泡了杯瑞幸的生椰拿铁(9.9元券真香),坐在12㎡的书房里敲下这些字。房贷每月6800,工资条上写着22k,但我知道,这一切来之不易。


去年十月,我还在一家电商公司做功能测试。每天的工作就是点点点、写写用例、提提bug。说实话,干得挺没劲的。不是说测试不好,而是我总觉得自己像个“二等公民”——开发们在会议室讨论架构、微服务、高并发,我在旁边默默记下他们说的“这个接口要测幂等性”,心里却在想:“我什么时候也能写出被别人测的代码?”

那会儿我和老婆刚在杭州余杭买了个小两居,78㎡,总价320万。首付掏空了六个钱包,还背上了180万的贷款。每个月光利息就要三千多,加上物业水电,压力山大。某天晚上,她一边刷淘宝一边随口问我:“你是不是该想想转岗的事了?测试这行,再过五年会不会被淘汰啊?”

我心里咯噔一下。其实我早就在B站偷偷看《Python从入门到放弃》系列了,但一直没敢行动。毕竟,我本科学的是机械,转行做测试已经是跨行,现在又要从测试转开发?听起来像极了“中年危机提前发作”。

但现实不等人。年底绩效面谈,主管委婉地说:“你测试做得不错,但团队更需要懂自动化的。”言下之意:要么升级,要么边缘化。

我咬咬牙,决定赌一把——从测试转后端开发


为什么选Django?而不是Spring Boot?

很多人第一反应是:“后端不都用Java吗?你咋不去学Spring?”

这话没错。我前司的后端全是Java栈,微服务+Dubbo+Nacos那一套,看起来高大上。我也试着啃过《Spring实战》,但说实话,光是配个Maven依赖、搞清楚Bean生命周期,就让我头大如斗。更别说还要处理各种XML配置、AOP切面、事务回滚……作为一个半路出家的“野路子”,我需要的是快速看到成果,而不是在环境配置里卡三天。

这时候,我翻出了大学时蹭课听过的Python。记得老师说过:“Python适合快速原型开发。” 而Django,正是Python生态里最成熟的Web框架之一——自带ORM、Admin后台、用户认证,开箱即用。

更重要的是,我想做个自己的网站。不是那种静态HTML页面,而是一个能真正跑起来、有数据库、能登录注册的小应用。Django正好能满足。

于是,2023年11月的第一个周末,我打开VS Code,新建了一个项目文件夹,取名叫my_first_site。那一刻,手有点抖,仿佛在按火箭发射按钮。


搭建第一个Django网站:从零到能跑

第一步:环境准备(别跳过!)

很多人直接pip install django,结果后面各种版本冲突。我建议用虚拟环境:

python -m venv djangovenv
source djangovenv/bin/activate  # Linux/Mac
# Windows用:djangovenv\Scripts\activate
pip install django==4.2.7

为什么指定版本?因为新版可能和教程不兼容。我吃过亏——跟着一个2020年的视频学,结果Django 5.0把urls.py结构改了,折腾半天才发现是版本问题。

第二步:创建项目

django-admin startproject mysite
cd mysite
python manage.py runserver

浏览器打开 http://127.0.0.1:8000,看到那只可爱的火箭了吗?恭喜你,已经跑起来了!

内心OS:就这?这也叫后端?
现实打脸:别小看这一步,多少人卡在runserver报错,比如端口被占用、Python路径不对。我当时就因为装了两个Python版本,死活找不到manage.py在哪。

第三步:创建App(注意:不是Application)

Django里,“项目(Project)”包含多个“应用(App)”。比如一个电商网站,可能有usersproductsorders几个App。

python manage.py startapp blog

然后去mysite/settings.py里,把blog加到INSTALLED_APPS

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    # ...其他默认的
    'blog',  # ← 加这一行
]

第四步:写个简单的视图(View)

blog/views.py里:

from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello, 这是我第一个Django页面!")

再在blog目录下新建urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.hello, name='hello'),
]

最后,在主项目的mysite/urls.py里包含这个App的路由:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),  # ← 加这一行
]

重启服务器,访问 http://127.0.0.1:8000/blog/,看到文字了吗?那一刻,我激动得差点把咖啡打翻在键盘上


从“能跑”到“有用”:加个数据库

光输出字符串太无聊了。我想做个简单的博客系统——能发文章、能看列表。

Django的ORM真的香。不用写SQL,用Python类定义模型就行。

blog/models.py

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=100)
    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

Django自动帮你生成SQLite数据库(生产环境建议换PostgreSQL,但本地开发SQLite足够)。

接下来,让这些数据能在页面上显示。改写views.py

from django.shortcuts import render
from .models import Post

def post_list(request):
    posts = Post.objects.all()
    return render(request, 'blog/post_list.html', {'posts': posts})

这里用到了模板(Template)。在blog下新建templates/blog/post_list.html

<!DOCTYPE html>
<html>
<head>
    <title>我的博客</title>
</head>
<body>
    <h1>所有文章</h1>
    {% for post in posts %}
        <div>
            <h2>{{ post.title }}</h2>
            <p>{{ post.content|truncatewords:20 }}</p>
            <small>{{ post.created_at }}</small>
        </div>
    {% endfor %}
</body>
</html>

别忘了改路由,把hello换成post_list

刷新页面——如果看到空白,别慌!大概率是模板路径没配对。检查settings.py里的TEMPLATES是否包含当前App的模板目录(Django 4.x默认会自动找app/templates/app/,但新手容易搞错层级)。


额外彩蛋:用Django Admin管理内容

Django自带后台管理系统,简直是懒人福音。

先创建超级用户:

python manage.py createsuperuser

按提示输入用户名、邮箱、密码(密码不会显示,正常输入就行)。

然后在blog/admin.py注册模型:

from django.contrib import admin
from .models import Post

admin.site.register(Post)

重启服务器,访问 http://127.0.0.1:8000/admin,用刚才的账号登录。你会看到一个干净的后台,可以增删改查文章!

真实场景:上周五晚上,我老婆看到这个后台,惊讶地说:“你这不就是个简易版WordPress?” 我得意地点头:“对啊,而且只用了不到200行代码。”


为什么我说Django适合“转行者”?

回过头看,我选择Django而不是Java Spring,有几个关键原因:

  1. 学习曲线平缓:Java后端讲究“约定大于配置”,但那些约定对新手来说就是黑盒。Django虽然也有“魔法”,但文档极其友好,官方Tutorial写得像小说一样流畅。
  2. 快速反馈:写几行代码就能看到网页变化,这种正向激励对自学的人太重要了。而Java项目动辄要启动整个Spring上下文,等一分钟才看到“Hello World”,心态容易崩。
  3. 综合能力培养:Django逼你理解MVT(Model-View-Template)模式,这和MVC本质相通。等你熟悉了这套思维,再去看Java的Controller、Service、DAO分层,会发现底层逻辑惊人地一致。
  4. 副业可能性大:我后来用Django写了个小爬虫监控房价(用requests + BeautifulSoup抓链家数据,存进Django DB,再用前端展示趋势图)。这种“全栈小工具”,用Django几天就能搭出来,换成Java可能光搭环境就要一天。

说到爬虫——很多人以为Python只有爬虫,其实爬虫只是Python的冰山一角。Django让我意识到,Python真正的优势在于快速构建可运行的系统,而不仅仅是脚本自动化。


转型之后:从15k到22k,但我更看重什么?

今年3月,我成功内部转岗为后端开发,薪资从15k涨到22k。HR面谈时问我:“为什么选Python而不是继续深耕Java?”

我说:“我不是排斥Java,而是Django让我在最短时间内证明了自己能交付完整功能。等我站稳脚跟,自然会去学更多技术栈。后端的本质不是语言,而是解决问题的能力。”

现在,我依然会看Java项目,也会研究Go、Rust。但我不再焦虑“必须选对语言”。技术是工具,人才是核心

更重要的是,我不再是那个只会提bug的测试员。上周,我独立负责了一个订单状态同步模块,用Django写了API,对接了第三方物流系统。上线那天,产品跑过来拍我肩膀:“兄弟,牛啊!” ——这种成就感,比工资涨5k还爽。


给想转行的朋友几点真心话

  1. 别追求“一步到位”:我第一个Django项目漏洞百出——没做权限控制、没分页、XSS都没防。但没关系,先跑起来,再优化。完美主义是自学的最大敌人。
  2. 善用免费资源:Django官方文档(https://docs.djangoproject.com/)是我见过最好的技术文档之一,中文翻译也很全。别一上来就买课,先啃文档。
  3. 结合兴趣做项目:你想监控基金?做个Django站点自动抓取天天基金网数据。你喜欢追剧?做个豆瓣电影收藏站。有动力,才能坚持。
  4. 别怕暴露“菜”:我在公司内网贴过一篇《Django踩坑记录》,被好几个同事收藏。大家反而觉得我踏实。程序员圈子,真诚比装懂更受欢迎。

最后:技术之外,生活才是主线

写这篇文章的时候,老婆在客厅喊:“房贷还款日快到了,别光写代码,记得转钱!”

我笑着应了一声,心里却很踏实。三年前,我还是个对Linux命令都发怵的测试小白;今天,我能用代码创造价值,养得起这个家。

Django不是终点,它只是我转型路上的一块跳板。未来,我可能会深入微服务、云原生,甚至尝试用Rust重写性能瓶颈模块。但无论用什么技术,记住:我们写代码,是为了更好地生活,而不是被技术绑架

所以,如果你也在焦虑转行、房贷、35岁危机……不妨从一个小项目开始。
就现在,打开终端,敲下:

django-admin startproject your_future

你的未来,值得被认真对待。


作者:一个从测试转开发的普通程序员,坐标杭州,房贷6800/月,梦想是写出不被自己嫌弃的代码。

评论 0

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