Django 入门教程:搭建你的第一个 Python 网站
引言:为什么选 Django?

作为一名全栈开发者,我经常需要快速搭建一个 MVP 或者原型网站。在众多后端框架中,Django 是我的首选。不是因为它最流行,而是因为它足够成熟、开箱即用,能够让你专注于业务逻辑而不是重复的基础工作。
这篇文章源于我第一次使用 Django 搭建博客系统的经历。当时我刚从 Node.js 转过来,对 Python 的 Web 开发生态并不熟悉,踩了不少坑,也收获了很多经验。希望通过这篇文章,能够帮助你少走弯路,顺利迈出 Django 开发的第一步。
项目背景:一个小而完整的博客系统

去年年底,我接到一个任务:为一位内容创作者搭建一个个人博客网站,要求包括:
- 文章发布与展示
- 分类和标签管理
- 基础的搜索功能
- 用户登录后台进行内容管理
时间只有一周。作为项目起点,我决定用 Django 来实现这个目标。虽然之前只是了解过 Django,但它的 ORM、管理后台、模板引擎都让我觉得这是个不错的选择。
遇到的问题与挑战

尽管 Django 官方文档很详细,但在实际操作过程中还是遇到了一些典型问题:
1. 工程结构不清晰
刚开始的时候,我把所有东西都写在一个 app 里,models.py 很快就变得臃肿不堪。后来才知道,合理的模块划分是维护代码可读性和扩展性的基础。
教训总结:
- 每个核心实体单独一个 app(比如 blog, user)
- 把公共部分抽象成 common app
- 不要让某个 app 变得过于庞大
2. URL 设计混乱
最初没有规划 URL 结构,随便写 path,导致后期修改起来非常麻烦。后来参考了 RESTful 风格,并结合 Django 的命名 URL,才理顺了这一块。
建议做法:
- 使用
path()和re_path()进行路径匹配 - 给每个 URL 加上 name 属性,便于反向引用
- 把 app 的 urls.py 拆分出来,在主项目的 urls.py 中 include
3. 模板继承不熟练
Django 的模板系统非常好用,尤其是 template inheritance。但我一开始直接复制粘贴 HTML,直到第四个页面才发现应该抽象出 base.html。
推荐结构:
<!-- templates/base.html -->
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}默认标题{% endblock %}</title>
</head>
<body>
{% block content %}
默认内容
{% endblock %}
</body>
</html>
4. 数据库模型设计不合理
早期设计文章表的时候,字段名用了中文拼音如 biaoti,后来意识到规范命名的重要性,立即改为英文字段名:title, content, created_at 等。
优化建议:
- 使用驼峰或下划线命名法
- 对时间字段统一命名为
created_at和updated_at - 给外键加
related_name方便查询
解决方案详解

1. 创建项目和 App
首先安装 Django:
pip install django
然后创建项目和应用:
django-admin startproject myblog
cd myblog
python manage.py startapp article
python manage.py startapp user
目录结构如下:
myblog/
├── manage.py
├── myblog/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── article/
│ ├── migrations/
│ ├── models.py
│ ├── views.py
│ └── ...
└── user/
别忘了把新 app 加入 INSTALLED_APPS 设置中。
2. 定义数据模型(Models)
以文章为例:
# article/models.py
from django.db import models
from user.models import User
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='articles')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
运行迁移:
python manage.py makemigrations
python manage.py migrate
Django 自动生成数据库表结构,默认表名为 article_article。
3. 后台管理配置
Django 的 admin 后台是我最喜欢的特性之一。只需要注册模型即可拥有一个完整的 CRUD 接口。
# article/admin.py
from django.contrib import admin
from .models import Article
admin.site.register(Article)
创建超级用户:
python manage.py createsuperuser
访问 /admin 即可登录并管理文章数据。
4. 编写视图(Views)
Django 支持函数视图(FBV)和类视图(CBV)。初学者可以用 FBV 快速开发,熟悉之后再过渡到 CBV。
例如首页视图:
# article/views.py
from django.shortcuts import render
from .models import Article
def index(request):
articles = Article.objects.all().order_by('-created_at')[:10]
return render(request, 'index.html', {'articles': articles})
5. 配置 URL
# myblog/urls.py
from django.urls import path, include
from article.views import index
urlpatterns = [
path('', index, name='home'),
path('admin/', admin.site.urls),
path('article/', include('article.urls')),
]
将 article 的 url 拆分出去:
# article/urls.py
from django.urls import path
from .views import index, detail
app_name = "article"
urlpatterns = [
path('', index, name='list'),
path('<int:article_id>/', detail, name='detail'),
]
6. 模板渲染
模板放在 templates 目录下,结构示例:
templates/
├── base.html
├── index.html
└── article/
└── detail.html
index.html 示例:
{% extends "base.html" %}
{% block title %}首页 - 我的博客{% endblock %}
{% block content %}
<h1>欢迎来到我的博客</h1>
<ul>
{% for article in articles %}
<li><a href="{% url 'article:detail' article.id %}">{{ article.title }}</a></li>
{% endfor %}
</ul>
{% endblock %}
7. 静态文件配置
Django 项目部署时要注意静态文件处理。开发环境下可以这样配置:
# settings.py
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
记得导入 os 模块哦!
8. 部署上线
我最终选择 Nginx + Gunicorn 的方式部署到阿里云 CentOS 服务器上。以下是几个关键点:
a. 安装依赖
sudo apt-get update
sudo apt-get install python3-pip nginx
sudo pip3 install gunicorn
b. 配置 Gunicorn
进入项目根目录执行:
gunicorn --bind 0.0.0.0:8000 myblog.wsgi
c. 配置 Nginx
/etc/nginx/sites-available/default 文件示例:
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /static/ {
alias /path/to/static/;
}
location /media/ {
alias /path/to/media/;
}
}
重启 Nginx:
sudo systemctl restart nginx
效果与收益总结
整个博客项目在一周内顺利完成,用户反馈良好。后台操作直观、响应速度快。我从中也获得了一些宝贵的经验:
- Django 的 ORM 非常强大:不用再写 SQL,开发效率大大提高;
- 管理后台节省了大量人力成本:用户可以直接通过 admin 发布文章;
- 模块化设计至关重要:不同业务模块分开维护,方便后续扩展;
- 模板系统友好易用:即使是前端小白也能轻松掌握;
- 生产环境部署需谨慎处理静态文件:Nginx + Gunicorn 是标准组合,性能和稳定性都不错。
经验分享与建议
作为新手入门 Django,可能会被它的“重”架构吓到。其实只要你理解了 MTV 模式(Model-Template-View),很快就能上手。以下是一些实用建议:
1. 从官方文档入手,不要迷信视频教程
很多人一上来就看视频,结果越看越晕。其实 Django 官网 的教程已经足够清晰,跟着一步步来就行。关键是边学边练,不要只看不动手。
2. 善用 debug 工具
调试时候,可以在 settings.py 中设置 DEBUG = True,浏览器会显示详细的错误信息,有助于定位问题。
3. 学会使用 shell 调试模型
在命令行输入:
python manage.py shell
可以像普通 Python 一样测试模型操作,比如:
from article.models import Article
Article.objects.all()
4. 合理利用中间件
Django 提供了很多现成的中间件,例如安全相关的中间件、CSRF 防护等。线上环境一定要启用。
5. 关注性能问题
虽然 Django 适合中小型项目,但也注意以下几点:
- 查询尽量使用 select_related / prefetch_related 减少数据库请求
- 静态资源使用 CDN 加速
- 数据库索引要合理建立
- 使用缓存机制,比如 Redis
6. 学习一点前端知识
Django 虽然是后端框架,但掌握基本的 HTML/CSS/JS 会让你如虎添翼。推荐学点 Jinja2 模板语法以及 Bootstrap 框架提升 UI 效果。
写在最后
Django 是一个非常适合用来构建后端服务的框架,尤其对于追求开发效率和个人项目来说,几乎没有比它更适合的工具。这篇文章只是带你迈进了门槛,真正要深入掌握,还需要不断实践和思考。
希望你能通过本文建立起对 Django 的信心和兴趣。记住一句话:“框架不会限制你的能力,只会放大你的效率。”
如果你也有类似的经历或者遇到什么问题,欢迎留言交流。愿我们在技术路上共同成长!

评论 0