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

徐伟
2025-12-27 03:08
阅读 551

去年十月的一个周五晚上,我坐在北京回龙观那间月租3500、隔音差到能听见隔壁情侣吵架的出租屋里,盯着屏幕上一行行代码发呆。桌上泡面已经凉了,老婆——那时候还是女朋友——刚发来消息:“你又加班啊?别太拼了,身体要紧。”

我苦笑了一下,回了个“嗯”,却没敢告诉她,其实我根本没在加班。我只是卡在一个Django的路由配置上,整整三个小时,页面就是404。窗外秋风呼啸,屋子里只有机械键盘敲击的咔嗒声,还有我内心深处那种熟悉的焦虑感:“是不是我真的不适合做程序员?”

那时我已经相亲了N次——准确说是7次。第6次见面时,对方听说我是“搞IT的”,眼睛一亮,结果一听我月薪15k、还在租房、没有北京户口,笑容立马收敛了三分。第7次,就是现在的老婆。她也是北漂,做会计的,第一次见面就问我:“你累吗?”
我说:“累,但还能扛。”
她点点头:“那就好,我也累,但咱们一起扛吧。”

就是这句话,让我在无数个想放弃的深夜里,多撑了十分钟。


为什么我要学Django?

其实我最早是学Go的。

对,就是那个“Golang”。大学实习时带我的老大是个Go粉,张口闭口“并发模型”、“goroutine”,还总说“Python太慢,不适合高并发”。我信了,毕业后也一直用Go写微服务、API网关,自以为走在技术前沿。

但现实很骨感。去年公司裁员,我所在的Go后端组直接砍掉一半。HR找我谈话时说得委婉:“小陈啊,你的技术没问题,但业务方向调整……我们更需要全栈型人才,能快速出活的那种。”

那天走出公司大楼,北京的秋天干冷刺骨。我站在国贸地铁口,打开BOSS直聘,发现大多数中小公司招的都是“Python + Django/Flask”经验。尤其是那些想快速上线MVP(最小可行产品)的创业公司,根本等不起你用Go慢慢搭一套完整的微服务架构。

那一刻我才明白:技术没有高低贵贱,能解决问题、能让你活下去的,才是好技术。

于是,我决定从头学Django。


第一步:别被“框架”吓住

说实话,刚开始看Django文档时,我差点劝退自己。

“MTV模式”?“ORM”?“中间件”?一堆术语像天书。再加上网上有些教程一上来就讲“如何集成Celery做异步任务”、“如何用Docker部署”,我心想:我只是想搭个能跑的网页,不是要造火箭啊!

后来我冷静下来,告诉自己:就像相亲一样,别一上来就想找完美对象,先找个能聊天的试试。

于是我定了个小目标:用Django搭一个“相亲记录管理器”——记录每次相亲的时间、地点、对方特点、后续有没有联系。

听起来有点傻,但对我而言,这项目有真实需求。而且,它简单:只需要一个表单、一个列表页,再加点增删改查。


环境搭建:别在第一步就翻车

我用的是macOS(Windows用户别急,后面会提兼容性),首先确保你装了Python 3.8+。然后:

# 创建虚拟环境(强烈建议!别污染全局)
python -m venv mysite_env

# 激活环境
source mysite_env/bin/activate

# 安装Django
pip install django

# 验证安装
django-admin --version

这一步千万别跳过虚拟环境!我第一次就图省事直接pip install django,结果后来和系统其他包冲突,折腾半天才重装。

接着,创建项目:

django-admin startproject dating_manager
cd dating_manager

这时候你会看到一个叫dating_manager的文件夹,里面有个manage.py——这是你的“万能遥控器”,后面所有操作都靠它。

运行开发服务器:

python manage.py runserver

浏览器打开 http://127.0.0.1:8000,如果看到那只可爱的火箭图标和“It worked!”,恭喜你,Django世界的大门打开了!

小插曲:我第一次运行时端口被占用了,报错“Address already in use”。一查,原来是我之前用Go写的某个服务还在后台跑着。无奈kill掉,心里默默吐槽:“Go,你真是阴魂不散啊。”


创建你的第一个App:别把Project和App搞混

Django里有个概念容易混淆:Project ≠ App

  • Project 是整个网站,比如“dating_manager”
  • App 是网站里的一个功能模块,比如“记录相亲”、“用户登录”

所以我们要新建一个App:

python manage.py startapp records

然后在dating_manager/settings.py里,找到INSTALLED_APPS,加上:

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

这一步很重要!否则Django不会加载你的App。


数据模型:用Python定义数据库

相亲记录需要存什么?我列了几个字段:

  • 对方姓名
  • 相亲日期
  • 地点(比如“朝阳大悦城星巴克”)
  • 印象(“聊得来” / “全程玩手机”)
  • 是否继续联系

records/models.py里写:

from django.db import models

class DateRecord(models.Model):
    name = models.CharField(max_length=100)
    date = models.DateField()
    location = models.CharField(max_length=200)
    impression = models.TextField()
    contacted = models.BooleanField(default=False)

    def __str__(self):
        return f"{self.name} @ {self.date}"

写完别忘了生成并执行数据库迁移:

python manage.py makemigrations
python manage.py migrate

这时候Django会自动帮你创建SQLite数据库(开发够用),连SQL都不用写——这就是ORM的魅力。


后台管理:Django送你的“免费CRM”

Django自带Admin后台,简直是新手福音。

先在records/admin.py注册你的模型:

from django.contrib import admin
from .models import DateRecord

admin.site.register(DateRecord)

然后创建超级用户:

python manage.py createsuperuser

按提示输用户名、邮箱、密码(我设成了admin / 123456,别学我,生产环境一定要强密码)。

重启服务器,访问 http://127.0.0.1:8000/admin,用刚才的账号登录。你会发现,一个完整的CRUD界面已经自动生成!你可以添加、编辑、删除相亲记录,连搜索、过滤都有。

我当时惊呆了——这要是用Go从零写,至少得两天。Django半小时搞定。

老婆后来试用了一下,笑着说:“你这系统比我Excel表格还好用。” 我得意地说:“那当然,这可是Django!”


前端展示:写个简单的页面

光有后台不够,得让用户看到数据。

records/views.py里写一个视图:

from django.shortcuts import render
from .models import DateRecord

def record_list(request):
    records = DateRecord.objects.all().order_by('-date')
    return render(request, 'records/list.html', {'records': records})

然后在records/目录下新建templates/records/,创建list.html

<!DOCTYPE html>
<html>
<head>
    <title>我的相亲记录</td>
</head>
<body>
    <h1>相亲记录</h1>
    <ul>
    {% for record in records %}
        <li>
            {{ record.date }} - {{ record.name }} @ {{ record.location }}
            {% if record.contacted %}
                ✅ 已联系
            {% else %}
                ❌ 无后续
            {% endif %}
        </li>
    {% endfor %}
    </ul>
</body>
</html>

最后,在dating_manager/urls.py里配置路由:

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('records.urls')),
]

并在records/下新建urls.py

from django.urls import path
from . import views

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

刷新首页,你的相亲记录就展示出来了!


关于Go和GitHub的一点碎碎念

我知道有人会问:“既然Django这么快,为什么还要学Go?”

我的答案是:工具不同,场景不同
Go适合高性能、高并发的服务,比如支付系统、实时通信;而Django适合快速构建业务逻辑复杂的Web应用,比如后台管理系统、内容平台。

就像我和老婆——她是稳重型(像Django,可靠、全面),我是急性子(像Go,快、直接)。互补才长久。

至于GitHub,它是我学习路上的灯塔。每当我卡住,就去搜django tutorial github,总能找到开源项目参考。我也把自己的“相亲记录器”传了上去(当然匿名处理了数据),仓库地址就不放了,毕竟有点社死 😅。

但我想说的是:别怕代码丑,先跑起来。 GitHub上99%的项目,第一版都烂得像泡面汤。重要的是开始。


回老家?还是留下?

上周五晚上,我和老婆坐在阳台上吃火锅(终于不用泡面了),聊起未来。

“你觉得咱要不要回老家?”她问,“你爸妈年纪大了,而且那边房价才8000一平。”

我沉默了一会儿。北京机会多,但压力大;老家安稳,但技术岗位少。可转念一想,现在远程办公越来越普遍,Django这种全栈技能,反而让我有了“地理自由”

我甚至可以接一些海外的小项目,在GitHub上找freelance机会。月薪不一定比北京高,但生活成本低,幸福感可能更高。

最重要的是——我不再被“必须用某种语言”的执念绑架了。Go也好,Python也罢,都是工具。我能解决问题,就能生存,就能给家人更好的生活。


给新手的几点真心话

  1. 别追求“一步到位”:你的第一个Django项目可以很简陋,能跑就行。
  2. 善用官方文档:Django文档是公认最好的之一,别总依赖短视频教程。
  3. 虚拟环境是保命符:永远别在全局装包。
  4. GitHub是你的好朋友:看别人的代码,比自己瞎琢磨快十倍。
  5. 允许自己犯错:我第一次部署上线,把DEBUG=True忘关了,数据库密码差点泄露……但那又怎样?活着就好。

结语:技术之外,生活才是主线程

写这篇教程时,我刚收到老家一家公司的offer,月薪18k,但房租只要1200。老婆说:“回去吧,反正你用Django、用Go,在哪都能干活。”

我点点头,心里踏实了许多。

曾经我以为,程序员的价值在于掌握多少黑科技、能写多复杂的算法。但现在我明白了:真正的价值,在于用技术解决真实问题,让生活变得更好一点。

哪怕只是记录一次失败的相亲,哪怕只是给父母装一个能视频的网页——这些小事,才构成了我们活着的意义。

所以,如果你也在学Django,别焦虑。
打开终端,敲下django-admin startproject hello_world
然后,对自己说一句:
“兄弟,咱们慢慢来。”

毕竟,代码会跑,日子也会好起来的。

评论 0

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