更新时间:2025-11-22 11:05点击:57
在众多 Python Web 框架中,Django 一直占据着重要地位。作为一个 "batteries-included"(内置电池)的框架,它提供了完整的解决方案,从数据库交互到用户认证,从表单处理到后台管理,几乎涵盖了 Web 开发的方方面面。
对于初学者来说,Django 有几个显著优势:
本教程将带领你从零开始,假设你尚未安装 Python,一步步搭建 Django 开发环境,并创建你的第一个 Django 应用。
Django 是基于 Python 的 Web 框架,因此首先需要安装 Python 环境。
macOS 通常预装了 Python,但可能不是最新版本。推荐使用 Homebrew 安装:
首先安装 Homebrew(如果尚未安装):
打开终端,输入以下命令:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"使用 Homebrew 安装 Python:
brew install python大多数 Linux 发行版都预装了 Python,你可以通过以下命令检查版本:
python3 --version
如果需要安装或升级,可以使用发行版的包管理器:
Ubuntu/Debian:
sudo apt update
sudo apt install python3 python3-pip
Fedora/RHEL:
sudo dnf install python3 python3-pip安装完成后,验证是否安装成功:
打开命令提示符(Windows)或终端(macOS/Linux)
输入以下命令检查 Python 版本:
python --version # Windows 通常使用这个命令
# 或
python3 --version # macOS/Linux 通常使用这个命令你应该能看到类似这样的输出:Python 3.10.6(版本号可能不同)
同样验证 pip(Python 包管理工具)是否安装:
pip --version
# 或
pip3 --version注意:在不同系统中,Python 3 可能需要使用
python3命令,而 pip 可能需要使用pip3。为了方便,后续教程中我会统一使用python和pip,如果你的系统需要区分,请相应替换。
在开始 Django 开发之前,强烈建议使用虚拟环境。虚拟环境可以为每个项目创建独立的 Python 环境,避免不同项目之间的依赖冲突。
虚拟环境是一个隔离的目录,包含了一个特定版本的 Python 和一些额外的包。使用虚拟环境有以下好处:
首先,选择一个目录来存放你的 Django 项目,例如在用户目录下创建一个 django_projects 文件夹:
# 创建项目文件夹
mkdir django_projects
cd django_projects创建虚拟环境:
Python 3.3+ 内置了 venv 模块,可以直接使用:
# 创建名为 venv 的虚拟环境
python -m venv venv
这条命令会在当前目录下创建一个名为 venv 的文件夹,里面包含了一个独立的 Python 环境。
创建完成后,需要激活虚拟环境:
Windows(命令提示符):
venv\Scripts\activateWindows(PowerShell):
.\venv\Scripts\Activate.ps1macOS/Linux(bash/zsh):
source venv/bin/activate
激活成功后,你会看到命令行提示符前出现 (venv) 字样,表示当前处于虚拟环境中。
当你完成工作需要退出虚拟环境时,可以使用以下命令:
deactivate注意:每次开始工作时,都需要进入项目目录并激活虚拟环境。这是一个良好的开发习惯,建议严格遵守。
在激活的虚拟环境中,使用 pip 安装 Django 非常简单:
pip install django
这条命令会安装最新版本的 Django。如果你需要特定版本,可以指定版本号:
pip install django==4.2.7 # 安装 4.2.7 版本
安装完成后,验证 Django 是否安装成功:
django-admin --version
如果看到版本号输出(如 4.2.7),说明 Django 已成功安装。
个人观点:对于生产环境,我建议指定 Django 版本,以确保项目的稳定性。Django 每个 LTS(长期支持)版本会提供 3 年的安全更新,是生产环境的理想选择。当前最新的 LTS 版本是 4.2.x。
Django 提供了一个命令行工具 django-admin 来帮助我们创建和管理项目。
在虚拟环境激活的状态下,执行以下命令创建一个名为 myfirstproject 的 Django 项目:
django-admin startproject myfirstproject
这条命令会创建一个名为 myfirstproject 的文件夹,里面包含了 Django 项目的基本结构:
myfirstproject/
├── manage.py
└── myfirstproject/
├── __init__.py
├── asgi.py
├── settings.py
├── urls.py
└── wsgi.py
让我们解释一下这些文件和目录的作用:
manage.py:一个命令行工具,用于与 Django 项目交互,比如启动服务器、创建应用等myfirstproject/:项目的主目录,包含项目的配置文件__init__.py:空文件,告诉 Python 这是一个 Python 包settings.py:项目的设置文件,包含数据库配置、应用列表等urls.py:项目的 URL 配置,定义 URL 路由规则asgi.py:用于 ASGI 兼容的 Web 服务器的配置wsgi.py:用于 WSGI 兼容的 Web 服务器的配置创建完成后,进入项目目录:
cd myfirstproject
现在,我们所有的操作都将在这个目录下进行。
在开始编写代码之前,让我们先了解一下 Django 项目的核心配置文件 settings.py。
使用你喜欢的文本编辑器或 IDE 打开 myfirstproject/settings.py 文件。这里推荐一些常用的编辑器:VS Code、PyCharm、Sublime Text 等。
DEBUG:调试模式开关。在开发阶段设置为 True,可以显示详细的错误信息;在生产环境必须设置为 False。
ALLOWED_HOSTS:允许访问的主机列表。在开发阶段可以留空或设置为 ['localhost', '127.0.0.1'];在生产环境需要设置为实际的域名。
INSTALLED_APPS:项目中安装的应用列表。Django 默认已经包含了一些内置应用,如 django.contrib.admin(管理后台)、django.contrib.auth(用户认证)等。
DATABASES:数据库配置。Django 默认使用 SQLite 数据库,这对于开发非常方便,无需额外配置。在生产环境中,你可能需要切换到 PostgreSQL、MySQL 等数据库。
STATIC_URL:静态文件(CSS、JavaScript、图片等)的 URL 前缀。
个人观点:在开发初期,建议保持默认配置不变。随着项目的发展,再根据实际需求修改这些配置。特别是
DEBUG选项,在部署到生产环境前一定要记得关闭,否则可能会泄露敏感信息。
Django 内置了一个开发用的 Web 服务器,方便我们在开发过程中预览和测试应用。
在项目目录下(包含 manage.py 的目录),执行以下命令:
python manage.py runserver
如果一切正常,你会看到类似以下的输出:
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
October 06, 2025 - 10:00:00
Django version 4.2.7, using settings 'myfirstproject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
这表示开发服务器已经启动,默认运行在 http://127.0.0.1:8000/(本地主机的 8000 端口)。
现在,打开你的浏览器,访问 http://127.0.0.1:8000/,你应该能看到 Django 的欢迎页面,上面写着 "Congratulations on your first Django-powered page!"。
注意:开发服务器仅用于开发环境,不适合用于生产环境。它的性能和安全性都不满足生产环境的要求。
如果 8000 端口被占用,或者你想使用其他端口,可以在启动服务器时指定端口:
python manage.py runserver 8080 # 使用 8080 端口
也可以指定允许访问的 IP 地址:
python manage.py runserver 0.0.0.0:8000 # 允许局域网内其他设备访问要停止开发服务器,在命令行中按 Ctrl + C(Windows/Linux)或 Cmd + C(macOS)。
Django 项目由一个或多个应用(app)组成。应用是功能的集合,例如一个博客项目可能包含用户认证应用、文章管理应用、评论应用等。
让我们创建一个名为 myfirstapp 的应用:
manage.py 的目录),并且虚拟环境已激活myfirstapp/
├── __init__.py
├── admin.py
├── apps.py
├── migrations/
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
这些文件的作用:
__init__.py:空文件,标识这是一个 Python 包admin.py:用于配置 Django 管理后台apps.py:应用的配置migrations/:存放数据库迁移文件models.py:定义数据模型tests.py:用于编写测试代码views.py:定义视图函数,处理用户请求创建应用后,需要在项目中注册它,这样 Django 才会识别这个应用。
打开 myfirstproject/settings.py 文件,找到 INSTALLED_APPS 列表,添加我们的应用:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myfirstapp', # 添加这一行,注册我们的应用
]个人观点:将应用模块化是 Django 的一个优秀设计。这种结构使代码更有条理,便于维护和扩展。在实际开发中,建议根据功能划分应用,每个应用专注于解决特定的问题。
视图是处理用户请求并返回响应的函数或类。让我们创建一个简单的视图。
打开 myfirstapp/views.py 文件,添加以下代码:
from django.http import HttpResponse
def home(request):
"""首页视图函数"""
return HttpResponse("Hello, Django! 这是我的第一个 Django 应用。")
这个简单的视图函数接收一个 request 参数(表示用户的请求),并返回一个包含 "Hello, Django! 这是我的第一个 Django 应用。" 文本的响应。
现在我们有了视图,还需要配置 URL 路由,告诉 Django 当用户访问某个 URL 时应该调用哪个视图。
首先,在 myfirstapp 目录下创建一个名为 urls.py 的文件,添加以下代码:
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
]
这段代码定义了应用级的 URL 路由:
views.home 视图函数name='home' 给这个路由起了一个名字,方便在模板中引用接下来,需要将应用的 URL 配置添加到项目的 URL 配置中。
打开 myfirstproject/urls.py 文件,修改为以下内容:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('myfirstapp.urls')), # 添加这一行,包含应用的 URL 配置
]
这里我们使用 include 函数将 myfirstapp.urls 包含进来,意味着当用户访问网站根路径时,会使用 myfirstapp 应用的 URL 配置。
现在,让我们启动开发服务器,测试一下我们创建的视图:
python manage.py runserver
访问 http://127.0.0.1:8000/,你应该能看到我们在视图中定义的文本:"Hello, Django! 这是我的第一个 Django 应用。"
恭喜!你已经成功创建了第一个 Django 应用,并显示了一个简单的页面。
Django 的 ORM(对象关系映射)系统允许我们使用 Python 类来定义数据库结构,而无需直接编写 SQL。
让我们创建一个简单的 Article 模型,用于存储文章信息。
打开 myfirstapp/models.py 文件,添加以下代码:
from django.db import models
from django.utils import timezone
class Article(models.Model):
"""文章模型"""
title = models.CharField(max_length=200) # 文章标题,最大长度 200
content = models.TextField() # 文章内容
created_at = models.DateTimeField(default=timezone.now) # 创建时间,默认为当前时间
published = models.BooleanField(default=False) # 是否发布,默认为 False
def __str__(self):
"""返回模型的字符串表示,通常用于管理后台"""
return self.title
这个模型定义了一个文章实体,包含以下字段:
title:文章标题,使用 CharField 表示短文本content:文章内容,使用 TextField 表示长文本created_at:创建时间,使用 DateTimeFieldpublished:是否发布,使用 BooleanField 表示布尔值__str__ 方法定义了模型实例的字符串表示,这在管理后台中会很有用。
定义好模型后,我们需要将模型映射到数据库中。Django 使用迁移(migrations)来管理数据库结构的变化。
首先,创建迁移文件:
python manage.py makemigrations myfirstapp
这条命令会根据模型的变化生成迁移文件,输出类似:
Migrations for 'myfirstapp':
myfirstapp/migrations/0001_initial.py
- Create model Article然后,将迁移应用到数据库:
python manage.py migrate
这条命令会执行所有未应用的迁移,包括 Django 内置应用的迁移和我们刚刚创建的迁移。输出类似:
Operations to perform:
Apply all migrations: admin, auth, contenttypes, myfirstapp, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
...
Applying myfirstapp.0001_initial... OK
Applying sessions.0001_initial... OK
现在,我们的 Article 模型已经被创建到数据库中了。
个人观点:Django 的迁移系统是其一大亮点。它允许我们像版本控制代码一样管理数据库结构的变化,使团队协作和部署变得更加简单。每次修改模型后,都应该创建并应用迁移。
Django 提供了一个强大的自动生成的管理后台,让我们可以轻松地管理数据。
首先,需要创建一个超级用户(管理员)来登录管理后台:
python manage.py createsuperuser
按照提示输入用户名、电子邮件和密码:
Username (leave blank to use 'yourusername'): admin
Email address: admin@example.com
Password: # 输入密码,输入时不会显示
Password (again): # 再次输入密码
Superuser created successfully.要在管理后台中管理我们的 Article 模型,需要将其注册到管理后台。
打开 myfirstapp/admin.py 文件,添加以下代码:
from django.contrib import admin
from .models import Article
# 注册 Article 模型
admin.site.register(Article)启动开发服务器:
python manage.py runserver
访问 http://127.0.0.1:8000/admin/,使用刚才创建的超级用户登录。
登录后,你会看到 Django 管理后台的界面,其中包含了我们注册的 Article 模型。你可以点击 "Articles" 进入文章管理页面,尝试添加、编辑和删除文章。
提示:Django 管理后台非常强大,你可以通过自定义
ModelAdmin类来定制管理界面的外观和行为。例如,你可以指定列表中显示哪些字段,添加搜索功能等。
目前我们的首页只显示了一句静态文本。让我们修改它,使其显示所有已发布的文章列表。
首先,在 myfirstapp 目录下创建一个 templates 目录,然后在 templates 目录下再创建一个 myfirstapp 目录:
mkdir -p myfirstapp/templates/myfirstapp
这样做的目的是避免不同应用的模板文件重名冲突。Django 会自动在每个应用的 templates 目录中查找模板文件。
在 myfirstapp/templates/myfirstapp 目录下创建一个名为 home.html 的文件,添加以下内容:
我的博客文章
{% if articles %}
{% for article in articles %}
{{ article.title }}
{{ article.created_at|date:"Y年m月d日 H:i" }}
{{ article.content|truncatechars:200 }}
{% endfor %}
{% else %}
还没有发布的文章。
{% endif %}
这是一个简单的 HTML 模板,使用了 Django 的模板语法:
{% if articles %}:条件判断,如果有文章则显示文章列表{% for article in articles %}:循环遍历文章列表{{ article.title }}:显示文章标题{{ article.created_at|date:"Y年m月d日 H:i" }}:显示格式化后的创建时间,|date 是一个模板过滤器{{ article.content|truncatechars:200 }}:显示文章内容的前 200 个字符现在,修改 myfirstapp/views.py 中的 home 视图,使其查询数据库并使用模板:
from django.shortcuts import render
from .models import Article
def home(request):
"""首页视图函数,显示已发布的文章列表"""
# 查询所有已发布的文章,并按创建时间倒序排列
articles = Article.objects.filter(published=True).order_by('-created_at')
# 将文章列表传递给模板
return render(request, 'myfirstapp/home.html', {'articles': articles})
这里我们使用了 render 函数,它会加载指定的模板,并将数据传递给模板。Article.objects.filter(published=True) 用于查询所有已发布的文章。
现在,访问 http://127.0.0.1:8000/,你会看到一个简单的博客首页。如果之前在管理后台添加了已发布的文章,它们会显示在这里;如果没有,会显示 "还没有发布的文章。"。
尝试在管理后台添加几篇已发布的文章,然后刷新首页,看看效果。
让我们为应用添加一个显示单篇文章详情的功能。
在 myfirstapp/views.py 中添加一个 article_detail 视图:
from django.shortcuts import render, get_object_or_404
from .models import Article
# ... 之前的 home 视图保持不变 ...
def article_detail(request, pk):
"""文章详情视图,显示单篇文章的完整内容"""
# 根据主键查询文章,如果不存在则返回 404 错误
article = get_object_or_404(Article, pk=pk)
return render(request, 'myfirstapp/article_detail.html', {'article': article})
get_object_or_404 函数会根据主键(pk)查询文章,如果找不到对应的文章,会返回 404 错误页面。
在 myfirstapp/templates/myfirstapp 目录下创建 article_detail.html 文件:
{{ article.title }}
{{ article.created_at|date:"Y年m月d日 H:i" }}
{{ article.content|linebreaks }}
返回首页
{{ article.content|linebreaks }} 会将文章内容中的换行符转换为 HTML 的 <br> 或 <p> 标签。{% url 'home' %} 使用了我们之前定义的路由名称,生成首页的 URL。
修改 myfirstapp/urls.py,添加详情页的路由:
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
path('article//', views.article_detail, name='article_detail'),
]
<int:pk> 表示这是一个整数类型的参数,会被传递给 article_detail 视图的 pk 参数。
修改 home.html,为每篇文章的标题添加链接,指向详情页:
{{ article.title }}
现在,访问首页,点击文章标题,会跳转到该文章的详情页。
恭喜你!通过本教程,你已经完成了以下内容:
这只是 Django 学习的开始。Django 还有很多强大的功能等待你去探索:
个人观点:学习 Django 最好的方法是动手实践。选择一个小项目(如个人博客、待办事项应用等),逐步实现其功能。遇到问题时,查阅 Django 官方文档(https://docs.djangoproject.com/),它是最权威、最全面的学习资源。
祝你在 Django 的学习之旅中取得进步!如果你有任何问题,欢迎在评论区留言讨论。