Django新手村通关指南:从零搭建你的第一个Python网站
上周五晚上,我正躺在成都家里的沙发上刷着招聘网站——没错,又到了一年一度“看看外面世界”的季节。最近不少JD里都写着“熟悉Django者优先”,甚至有家做区块链数据可视化的小公司直接在职位描述里写:“我们需要能快速用Django搭出原型的人”。
我寻思着:咱天天调参炼丹,PyTorch玩得飞起,结果连个像样的Web后端都没正经写过?简历上除了“参与多个AI模型训练项目”,连个能点开的链接都没有,属实有点寒碜。
于是,我决定花一个周末,用Django搭个最简单的网站——就叫“资源收藏夹”吧,用来存我平时看到的优质技术文章、开源项目、甚至一些靠谱的区块链白皮书链接。既能练手,又能真用,还能往简历上加一行“独立开发并部署个人知识管理系统(基于Django)”。
为什么是Django?而不是Flask或者FastAPI?
别急着喷。我知道现在FastAPI风头正劲,异步、类型提示、自动生成文档,帅得一批。但对我这种后端经验几乎为零的“伪全栈”来说,Django那种“自带电池”的哲学太香了——用户系统、Admin后台、ORM、路由、模板引擎……通通给你配好,开箱即用。
尤其是在赶deadline的时候(比如老板突然说“下周一要给投资人看个demo”),你根本没时间去纠结“该用哪个中间件做认证”、“数据库连接池怎么配”。Django帮你把80%的脏活累活干了,剩下的20%,你专注业务逻辑就行。
而且,Django的Admin界面,真的救过我的命。去年双11期间我们团队临时要查一批模型推理日志,运维死活不肯开数据库权限。我三分钟建了个Django admin,把日志表注册进去,直接在浏览器里筛选、导出,产品经理当场鼓掌(虽然可能只是客套)。
动手:创建你的第一个Django项目
先确保你装了Python(3.8+就行,别整太老的版本)。然后:
pip install django
django-admin startproject resource_hub
cd resource_hub
python manage.py runserver
浏览器打开 http://127.0.0.1:8000,看到那匹小火箭没?恭喜,你已经击败了全国90%只看不练的教程读者。
接下来,我们要创建一个应用(app),用来管理“资源”这个核心实体:
python manage.py startapp links
Django里,“项目”是整个网站,“应用”是功能模块。比如你以后还可以加个 blog app 或者 blockchain_tracker app。这种解耦设计,比把所有代码塞在一个文件里清爽多了——我见过实习生把Flask项目写成单文件5000行,连Ctrl+F都卡。
数据模型:一条资源该有哪些字段?
既然是“资源收藏夹”,每条记录至少要有:
- 标题(title)
- 链接(url)
- 描述(description)
- 分类(category,比如“前端动画”、“区块链”、“AI论文”)
- 添加时间(created_at)
于是,在 links/models.py 里写下:
from django.db import models
class Resource(models.Model):
CATEGORY_CHOICES = [
('frontend', '前端交互'),
('blockchain', '区块链'),
('ai', '人工智能'),
('python', 'Python'),
('other', '其他'),
]
title = models.CharField(max_length=200, verbose_name="标题")
url = models.URLField(verbose_name="链接")
description = models.TextField(blank=True, verbose_name="描述")
category = models.CharField(
max_length=20,
choices=CATEGORY_CHOICES,
default='other',
verbose_name="分类"
)
created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
def __str__(self):
return self.title
class Meta:
verbose_name = "资源"
verbose_name_plural = "资源"
注意到没?我把“区块链”和“Python”都设成了独立分类——毕竟这俩可是当前简历上的热门标签,单独拎出来方便以后做统计或过滤。
写完模型,别忘了生成并执行迁移:
python manage.py makemigrations
python manage.py migrate
这时候数据库里就有 links_resource 表了。SQLite默认就够用,别一上来就折腾PostgreSQL,除非你真打算上线。
快速拥有后台管理能力:Django Admin
在 links/admin.py 里注册模型:
from django.contrib import admin
from .models import Resource
@admin.register(Resource)
class ResourceAdmin(admin.ModelAdmin):
list_display = ['title', 'category', 'created_at']
list_filter = ['category', 'created_at']
search_fields = ['title', 'description']
再创建个超级用户:
python manage.py createsuperuser
输入用户名密码,重启服务,访问 /admin,登录后就能看到清爽的管理界面了!你可以手动添加几条测试数据,比如:
- 标题:
Three.js实现粒子动画 - 链接:
https://threejs.org/... - 分类:
前端交互
或者:
- 标题:
以太坊黄皮书精读 - 链接:
https://ethereum.github.io/yellowpaper/paper.pdf - 分类:
区块链
这时候你可能会想:“这不就是个高级版Excel吗?”——但关键在于,它背后是完整的Web应用架构,未来可以轻松加上用户权限、API接口、定时爬虫自动抓取新资源等等。
前端展示:让网站能被别人看到
光有后台不够,得有个首页展示这些资源。虽然我对前端动画感兴趣,但这次先用最朴素的方式——Django模板。
在 links/views.py 写个视图:
from django.shortcuts import render
from .models import Resource
def home(request):
resources = Resource.objects.all().order_by('-created_at')
return render(request, 'home.html', {'resources': resources})
配置URL路由。先在 links/urls.py(如果没有就新建)里:
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
]
然后在主项目 resource_hub/urls.py 中 include 它:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('links.urls')),
]
最后,创建模板文件 links/templates/home.html:
<!DOCTYPE html>
<html>
<head>
<title>我的资源收藏夹</title>
<style>
body { font-family: -apple-system, BlinkMacSystemFont, sans-serif; margin: 40px; }
.resource { margin-bottom: 20px; padding: 15px; border-left: 4px solid #007bff; }
.category { color: #6c757d; font-size: 0.9em; }
</style>
</head>
<body>
<h1>✨ 我的技术资源库</h1>
{% for res in resources %}
<div class="resource">
<div class="category">{{ res.get_category_display }}</div>
<h3><a href="{{ res.url }}" target="_blank">{{ res.title }}</a></h3>
<p>{{ res.description|default:"暂无描述" }}</p>
</div>
{% empty %}
<p>还没有收藏任何资源,快去添加吧!</p>
{% endfor %}
</body>
</html>
跑起来,首页就能看到你刚在Admin里加的资源了!点击标题还能跳转原链接——虽然样式简陋,但功能闭环了。
性能与扩展性考虑(来自一个被线上事故教育过的AI工程师)
别以为这只是玩具。如果你真打算把它当简历项目,甚至未来扩展成团队知识库,就得考虑几点:
| 考虑项 | 初期做法 | 未来优化方向 |
|---|---|---|
| 数据库 | SQLite(开发) | PostgreSQL(生产) |
| 静态文件 | 开发服务器托管 | Nginx + CDN |
| 并发能力 | 单进程 | Gunicorn + 多Worker |
| 安全性 | DEBUG=True(仅本地) | 关闭DEBUG,设SECRET_KEY,加CSP |
| 部署 | 手动上传 | Docker + 自动化CI/CD |
比如,别在生产环境留 DEBUG = True,否则一旦报错,用户能看到你整个项目结构,甚至环境变量——我见过有人把数据库密码直接打在错误页面上,当场社死。
另外,Django ORM 虽然方便,但要注意 N+1 查询问题。比如你在模板里遍历资源,又去查每个资源的作者(如果有的话),就会发N次SQL。用 select_related 或 prefetch_related 预加载就能解决。
最后:这玩意儿对简历真有用吗?
坦白说,光一个“Django资源收藏夹”肯定拿不到大厂offer。但如果你能在这基础上做点延伸——比如:
- 加个API接口,让前端用Axios调用(展示前后端分离能力)
- 用Celery加个定时任务,自动抓取GitHub Trending里的Python项目
- 集成一个简单的区块链浏览器API,展示某个合约的交易记录
- 用Dockerfile打包,一键部署到云服务器
那你简历上就能写:“基于Django构建可扩展的知识管理平台,支持多分类、RESTful API及自动化数据采集,日均处理请求2000+”。
而且,亲手搭过完整Web应用的人,和只会写模型训练脚本的人,在系统思维上真的不一样。你会开始考虑缓存、鉴权、日志、监控……这些在AI岗位上也越来越重要——毕竟,谁也不想自己的推荐模型上线后因为没做限流,被前端一个循环调用搞崩了。
现在,我的“资源收藏夹”已经跑在我阿里云最低配ECS上了(月付9.9,成都生活节奏舒服,但程序员也得精打细算)。每次看到有人通过我的分享链接去读那篇《深入浅出区块链共识算法》,我都觉得——值了。
所以,别再只盯着loss曲线看了。抽个周末,用Django搭点能被别人看到的东西。说不定下次面试时,你就能指着浏览器说:“这是我写的,代码在GitHub,要不要现场改个需求试试?”

评论 0