Django新手村通关指南:从零搭建你的第一个Python网站

♂周强
2026-01-15 03:41
阅读 463

上周五晚上,我正躺在成都家里的沙发上刷着招聘网站——没错,又到了一年一度“看看外面世界”的季节。最近不少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_relatedprefetch_related 预加载就能解决。

最后:这玩意儿对简历真有用吗?

坦白说,光一个“Django资源收藏夹”肯定拿不到大厂offer。但如果你能在这基础上做点延伸——比如:

  • 加个API接口,让前端用Axios调用(展示前后端分离能力)
  • 用Celery加个定时任务,自动抓取GitHub Trending里的Python项目
  • 集成一个简单的区块链浏览器API,展示某个合约的交易记录
  • 用Dockerfile打包,一键部署到云服务器

那你简历上就能写:“基于Django构建可扩展的知识管理平台,支持多分类、RESTful API及自动化数据采集,日均处理请求2000+”。

而且,亲手搭过完整Web应用的人,和只会写模型训练脚本的人,在系统思维上真的不一样。你会开始考虑缓存、鉴权、日志、监控……这些在AI岗位上也越来越重要——毕竟,谁也不想自己的推荐模型上线后因为没做限流,被前端一个循环调用搞崩了。


现在,我的“资源收藏夹”已经跑在我阿里云最低配ECS上了(月付9.9,成都生活节奏舒服,但程序员也得精打细算)。每次看到有人通过我的分享链接去读那篇《深入浅出区块链共识算法》,我都觉得——值了。

所以,别再只盯着loss曲线看了。抽个周末,用Django搭点能被别人看到的东西。说不定下次面试时,你就能指着浏览器说:“这是我写的,代码在GitHub,要不要现场改个需求试试?”

评论 0

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