Django入门教程:搭建你的第一个Python网站
开篇:Django是什么,用来做什么?

在我们开始学习具体的编程知识之前,先来了解一下Django到底是什么。简单来说,Django是一个用Python语言开发的Web框架,它就像是一套“网页建造工具包”,帮助你更高效地搭建一个功能完整的网站。
想象一下你要盖房子,如果没有工具和图纸,可能会花很多时间从头开始设计和制作各种零件。而有了Django这个“施工队”,你可以直接使用现成的结构、模板和组件,快速构建出功能完善的网站。
Django可以用来做哪些事情呢?以下是几个常见应用场景:
- 博客系统:用户可以发布文章、评论、点赞等。
- 在线商店:展示商品信息、处理订单、管理库存。
- 社交平台:注册登录、发布动态、添加好友。
- 企业官网:展示公司介绍、新闻、联系方式等静态页面。
总之,只要你需要用到后端功能(比如用户注册、数据库存储、页面动态交互等),Django都非常适合。而且由于它是基于Python开发的,对于初学者来说非常友好——Python本身就是一门语法简洁、易于上手的编程语言。
接下来,我们就一步步带着你走进Django的世界,手把手教你搭建属于自己的第一个网站!
环境准备:安装Python、Django与虚拟环境

在开始写代码之前,我们首先需要准备好开发所需的环境。别担心,这一步其实并不复杂,只要按照下面的步骤一步一步操作,你就能成功搭建好Django开发环境。
1. 安装 Python
Django是用Python写的,所以我们要先安装Python。
- 前往官网下载安装包:https://www.python.org/downloads/
- 根据你的操作系统选择对应版本(建议选择3.x系列)。
- 在安装过程中勾选【Add Python to PATH】,这样方便后续操作。
安装完成后,在命令行中输入:
python --version
如果你看到类似这样的输出:
Python 3.9.7
说明Python已经安装成功了 ✅
💡 注意:如果你是Mac用户,macOS系统一般自带Python2,但我们需要的是Python3。可以使用Homebrew安装最新版:
brew install python
2. 安装 pip(Python包管理器)
pip 是用来安装Python库的工具,默认情况下Python安装时会自动安装pip。
验证是否已安装pip:
pip --version
输出示例:
pip 21.2.4 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)
如果提示找不到命令,请参考官方文档重新安装或升级pip:
https://pip.pypa.io/en/stable/installation/
3. 创建虚拟环境(推荐)
为了避免不同项目之间的依赖冲突,我们推荐使用虚拟环境(virtual environment)。它可以为每个项目创建一个独立的“小空间”。
安装并使用 venv 模块(Python3内置):
python -m venv myenv # 创建名为 myenv 的虚拟环境
source myenv/bin/activate # Linux/macOS
myenv\Scripts\activate # Windows
激活之后你会看到终端前缀变成:
(myenv) $
表示你现在在虚拟环境中工作了 ✅
4. 安装 Django
终于到了关键一步!现在我们通过pip来安装Django:
pip install django
验证是否安装成功:
django-admin --version
输出示例:
4.1.5
恭喜你,Django环境已经搭建完成啦!
核心概念:理解Django的三大核心模块
Django虽然强大,但它的结构非常清晰,主要包括三个核心部分:M(模型)、T(模板)、V(视图)。这三者分工明确,分别负责数据存储、页面展示和逻辑处理。下面我们就一一介绍它们的作用,并配以简单的代码示例。

M:Model —— 数据库模型
Model 是用来定义数据表结构的。
我们可以把它理解为一个电子表格的设计图,比如一个用户表可能包括用户名、邮箱、注册时间等等字段。
举个例子:你想做一个博客网站,你需要一张叫 Post 的数据表,包含标题和内容两个字段。
# 文件名:blog/models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
def __str__(self):
return self.title
这段代码的意思是:我们定义了一个叫做 Post 的类(也就是数据表),其中有两个字段:
title是字符串类型,最大长度是200个字符;content是文本类型,没有长度限制;__str__方法用于在后台显示时展示标题。
🧠 新手小贴士:写完model后记得运行以下两条命令让Django根据你的代码生成对应的数据库表:
python manage.py makemigrations python manage.py migrate
T:Template —— 页面模板
Template 用来控制HTML页面的结构和样式。
我们可以把模板看作是一个“网页空壳子”,它里面的内容可以根据后台传递的数据动态填充。
例如,我们想在首页展示所有博客文章的标题列表:
<!-- 文件名:templates/post_list.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>博客列表</title>
</head>
<body>
<h1>我的博客文章</h1>
<ul>
{% for post in posts %}
<li>{{ post.title }}</li>
{% endfor %}
</ul>
</body>
</html>
在这段代码中:
{% for post in posts %}是一个循环语句,意思是遍历所有文章;{{ post.title }}表示把文章的标题填入到页面中;- 整个HTML文件就是一个模板文件,将来会被视图调用渲染。
V:View —— 视图函数
View 用来处理请求并返回响应(如页面、JSON等)。
你可以把它理解为一个“中间人”——当用户访问某一页的时候,View负责去查找数据,并调用模板生成最终页面。
继续上面的例子:用户访问 /posts/ 路径,希望看到所有的文章列表。
# 文件名:blog/views.py
from django.shortcuts import render
from .models import Post
def post_list(request):
posts = Post.objects.all() # 从数据库中取出所有文章对象
return render(request, 'post_list.html', {'posts': posts})
解释一下:
request是用户的请求;Post.objects.all()是数据库查询语句,意思是获取所有文章;render()是一个函数,它的作用是将post_list.html模板渲染出来,并传入变量posts。
小结:MVT结构简述
| 缩写 | 中文名 | 作用 |
|---|---|---|
| M(Model) | 模型 | 定义数据库表结构,存储和操作数据 |
| V(View) | 视图 | 接收请求,处理逻辑,调用模板 |
| T(Template) | 模板 | 显示页面内容,负责前端展示 |
这三者配合,就能完成一个动态网页的展示啦!是不是很简单?
实战项目:从零开始搭建一个博客网站
现在我们已经掌握了Django的基本概念,接下来就开始动手实践吧!我们将一步步搭建一个最简单的博客网站,包括:
- 创建新项目和应用
- 配置数据库模型
- 添加管理界面
- 编写视图和模板
- 设置URL路由
- 启动服务器预览效果
让我们开始吧!
第一步:创建Django项目和应用
在一个干净的虚拟环境中,执行以下命令创建一个新的Django项目:
django-admin startproject mysite
cd mysite
接下来,创建一个应用,我们命名为 blog:
python manage.py startapp blog
打开 mysite/settings.py,在 INSTALLED_APPS 中添加 'blog':
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog', # 新增这一行
]
第二步:编写模型(Model)
修改 blog/models.py 文件,定义文章模型:
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
pub_date = models.DateTimeField('发布日期', auto_now_add=True)
def __str__(self):
return self.title
然后运行数据库迁移命令:
python manage.py makemigrations
python manage.py migrate
第三步:注册模型到管理界面
为了让管理员可以通过Django后台添加文章,我们需要注册我们的模型。
打开 blog/admin.py:
from django.contrib import admin
from .models import Post
admin.site.register(Post)
运行服务器:
python manage.py runserver
打开浏览器访问 http://127.0.0.1:8000/admin,用前面创建的超级用户账号登录后,就可以添加文章啦!
第四步:编写视图(View)
打开 blog/views.py,添加一个视图函数来显示所有文章:
from django.shortcuts import render
from .models import Post
def post_list(request):
posts = Post.objects.all()
return render(request, 'post_list.html', {'posts': posts})
第五步:创建模板(Template)
在 blog 应用目录下新建一个 templates 文件夹,并创建 post_list.html:
mysite/
└── blog/
└── templates/
└── post_list.html
写入如下内容:
<!DOCTYPE html>
<html>
<head>
<title>我的博客</title>
</head>
<body>
<h1>文章列表</h1>
<ul>
{% for post in posts %}
<li>{{ post.title }}</li>
{% empty %}
<li>还没有文章哦。</li>
{% endfor %}
</ul>
</body>
</html>
第六步:配置URL路由
打开 mysite/urls.py,添加对 post_list 视图的路由:
from django.urls import path
from blog.views import post_list
urlpatterns = [
path('admin/', admin.site.urls),
path('posts/', post_list, name='post_list'), # 新增这条
]
第七步:运行服务器查看效果
再次启动服务器:
python manage.py runserver
访问 http://127.0.0.1:8000/posts/,你应该能看到一个空白的列表。
回到后台,添加几篇测试文章,刷新页面就能看到它们啦 ✅
常见问题解答:新手最容易遇到的问题及解决方案
在学习过程中,难免会遇到一些问题。下面列举了一些新手常问的问题和解决办法,帮你少走弯路。
问题1:安装Django时报错怎么办?
错误示例:
ERROR: Could not find a version that satisfies the requirement django (from versions: none)
ERROR: No matching distribution found for django
可能原因与解决方法:
网络问题:请检查你的网络连接,尝试使用代理或换源安装。
使用豆瓣镜像加速安装:
pip install django -i https://pypi.douban.com/simplepip版本过低:更新pip试试:
pip install --upgrade pip
问题2:运行服务时报错“No module named ‘blog’”
错误信息:
ModuleNotFoundError: No module named 'blog'
原因分析:
可能是你在创建应用后忘记将其添加到 INSTALLED_APPS 中。
解决方法:
打开 settings.py 文件,找到 INSTALLED_APPS 列表,添加 'blog' 到其中。
问题3:访问页面出现404错误
情况描述:
当你输入某个URL地址访问页面,却收到404 Not Found错误。
可能原因:
- URL路径配置不正确;
- View函数未定义或拼写错误;
- 路由没有导入对应的视图函数。
排查建议:
- 检查
urls.py中的路径是否正确; - 查看视图函数名称是否一致;
- 确保导入了正确的函数或模块。
问题4:数据库迁移失败
错误信息:
django.db.utils.OperationalError: no such table: blog_post
可能原因:
未执行数据库迁移命令导致表不存在。
解决方法:
运行以下命令生成数据库表:
python manage.py makemigrations
python manage.py migrate
问题5:中文乱码或无法保存中文内容
问题表现:
后台输入中文标题或内容,保存后出现乱码或报错。
解决方法:
确保数据库支持中文编码。如果是SQLite,默认就支持,无需额外设置;如果是MySQL,则需要检查数据库的字符集是否为 utf8mb4,并在 settings.py 中配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'your_db_name',
'USER': 'root',
'PASSWORD': 'your_password',
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': {
'charset': 'utf8mb4',
},
}
}
问题6:运行服务器时报端口被占用
错误信息:
Error: That port is already in use.
解决办法:
更换端口号运行:
python manage.py runserver 8001或者终止占用该端口的进程,再重启。
学习建议:下一步该学什么?
恭喜你完成了第一个Django项目!接下来的学习方向可以从以下几个方面继续深入:
1. 学习更多关于模板的知识
- 模板继承(
{% extends %}) - 包含其他模板(
{% include %}) - 自定义模板标签和过滤器
这些内容能让你更好地组织HTML页面,提升可维护性。
2. 使用Django Forms提交数据
学会如何创建表单让用户输入数据(如发表评论、注册账户),并通过View进行处理。
推荐阅读:Django Forms官方文档
3. 理解前后端分离,尝试结合REST Framework
掌握前后端分离架构,使用 Django REST Framework 构建API接口,为未来开发小程序、APP或Vue/React项目打下基础。
4. 学会使用静态文件和媒体文件(CSS/JS/图片)
熟悉如何加载静态资源,实现更美观的页面展示。
5. 尝试部署上线项目
学习使用 Gunicorn + Nginx 部署网站,或将项目托管到云服务器(如阿里云、腾讯云、Heroku等)。
结束语:坚持就是胜利

Django看似庞大,但它每一个部分都很有条理,只要你愿意动手敲代码、不断尝试,很快就能上手。记住一句话:“程序员不是天生就会的,而是写出来的。”
希望这篇教程能为你打开通往Django世界的大门,也期待你能做出属于自己的精彩网站!如果你喜欢这篇文章,欢迎点赞、收藏或分享给身边的小伙伴。我们一起加油💪
如有任何问题,欢迎留言讨论~

评论 0