☰
Django从零安装到跑通第一个视图:完整实战指南
2026/10/15 10:14:45 网站建设 项目流程

从零开始装好一个能跑的 Django 服务,其实比你想的简单。这篇文章不聊太多抽象概念,就沿着「装环境 → 建项目 → 写视图 → 跑起来」这条主线走一遍,顺带把每一步背后的原因、我踩过的坑和你可以直接照抄的解决办法都整理出来。

不管你是刚接触 Web 开发的新手,还是之前用过 Flask、Spring 这类框架想转过来的老手,只要跟着这篇文章把 Django 的安装和第一个视图跑通,后面再学模板、模型、路由进阶,都会顺很多。因为最难的其实不是某个复杂功能,而是第一次把一个框架项目干净利落地拉起来。

1. 动手前的准备:搞清楚你要装什么、装哪个版本

很多东西卡住,不是操作不对,是思路没理清。安装 Django 前,我一般会先确认三件事:自己电脑上的 Python 环境是不是干净的、需要的是不是最新版本、以及要不要隔离安装。这三件事想明白,后面二十分钟内就能跑通。

1.1 Django 解决什么问题,为什么先学它

先给完全没接触过的朋友补个基础认知。Django 是一个基于 Python 的 Web 框架,它的核心价值是用一套现成的工具帮你解决 Web 开发里经常重复的那些事:URL 怎么分发、数据库怎么连、页面模板怎么渲染、表单怎么校验、后台管理怎么做。它走的是「全家桶」路线,很多功能内置好了,不用你东拼西凑。打个比方,用 Django 做网站,有点像买精装房,硬装基本配齐了,你只需要按自己的想法做软装;而用 Flask 这类微框架,更像是拿毛坯房,水电网全得自己布置,灵活但费事。

所以如果你是第一次接触 Web 开发,或者想快速做出一个结构清晰、能持续迭代的项目,Django 是非常合适的切入点。它帮你养成一套规范的项目组织方式,这在你以后写大一点的项目时特别值钱。

1.2 版本选型和 Python 环境适配

这里要特别注意一个关键点:不是所有 Django 版本都支持你电脑上当前的 Python 版本。装之前一定要对照一下兼容表,不然容易遇到装到一半或者运行时报错的尴尬。

以目前主流的 Django 版本为例:

Django 版本支持状况适配的 Python 版本
5.x最新主线版本3.10 及以上
4.2 LTS长期维护版本,稳定3.8 及以上
3.2 LTS老款稳定版,逐步淘汰3.6 及以上

我的建议是,除非项目有历史包袱,否则优先选择最新 LTS(长期支持)版本。比如 Django 4.2 LTS 就是一个很稳的版本,官方保证较长时间的安全维护,新学的话选它不会错。如果你的 Python 版本正好是 3.10 或更高,直接用最新的 5.x 也没问题。

检查 Python 版本的方法很简单。打开终端(Windows 用 CMD 或 PowerShell,macOS / Linux 用 Terminal),输入:

python --version

如果输出Python 3.12.x或者更高,那你基本可以毫无顾虑地装最新版 Django。如果输出的是 2.7 或者 3.5 这种老版本,建议先去 Python 官网下载新版本安装,这一步值得花点时间。另外,有些电脑上会同时存在python和python3两个命令,注意区分。如果你不确定,可以两个都执行试试,哪个能输出 Python 3.x 就用哪个。

提示:我个人强烈建议不要直接装在系统 Python 里。后面你项目多了,每个项目依赖的 Django 版本可能不一样,到时候想切换会非常痛苦。这一步的坑我踩过,所以下面先讲虚拟环境。

2. 环境隔离:用虚拟环境给项目建一个独立空间

说到虚拟环境,很多刚接触 Python 的人会觉得是多此一举。但你试想一下:你电脑上同时有项目 A 需要 Django 4.2,项目 B 需要 Django 5.0,如果都装在全局环境里,那必然有一个装不了,或者说会出现各种奇怪的库版本互相覆盖问题。虚拟环境就是解决这个问题的,它相当于给每个项目单独开了一个独立的小房间,房间里的 Python 和第三方库互不干扰。

2.1 使用 venv 创建虚拟环境

Python 3 自带了一个叫venv的标准库,不需要额外安装,用起来也简单。我们找个适合放项目的目录,然后执行:

mkdir myblog cd myblog python -m venv venv

这一步会在myblog目录下生成一个名为venv的文件夹,里面就是这个项目的独立 Python 环境。这个文件夹里装了独立的 Python 解释器和 pip 工具,以后你在这个项目里装的第三方库都放在这里。

如果你用的是 Windows,激活虚拟环境需要执行:

venv\Scripts\activate

如果你用的是 macOS 或 Linux,激活命令是:

source venv/bin/activate

激活成功后,你会注意到终端命令行的前面出现了(venv)这样的前缀标识。这就表示你现在已经进入虚拟环境了。看到这个前缀,说明接下来你的 pip 安装都不会影响到全局环境。

我在实际使用中发现,不少人在 Windows 下执行激活命令时会遇到「因为在此系统上禁止运行脚本」的报错,这是 PowerShell 的执行策略限制导致的。解决方法是,用管理员权限打开 PowerShell,执行一次:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

然后再重新执行激活命令就行了。这个设置只要做一次,后续项目都不会再有问题。

2.2 确认 pip 版本和安装 Django

进入虚拟环境后,先看一眼 pip 是否正常:

python -m pip --version

如果显示 pip 版本比较旧,可以先升级一下:

python -m pip install --upgrade pip

接下来正式安装 Django。这是整篇文章最关键的一步,也只此一条命令:

pip install django

如果你没有指定版本,这条命令默认会安装当前最新的稳定版。之后等它下载安装完成即可。安装好后,验证一下是否成功,我习惯用下面的方式确认:

python -m django --version

如果终端输出了一个版本号(比如5.2.1),就说明 Django 已经成功装进虚拟环境了。

这里多说一句,如果你的网络环境下载速度很慢,或者出现超时,可以使用国内镜像源安装:

pip install django -i https://pypi.tuna.tsinghua.edu.cn/simple

镜像源只是加快下载速度,不会影响安装后的使用,你可以放心用。

3. 创建第一个 Django 项目:从命令到项目结构

安装好 Django 之后,接下来的重头戏就是创建项目。这一步能让你看到 Django 项目长什么样,也能验证你的安装真的能用。我以创建一个名为myblog的项目为例,一步步来。

3.1 使用 django-admin 初始化项目

在虚拟环境处于激活状态、且你当前在myblog目录下时,执行:

django-admin startproject myblog .

注意我后面多加了一个点.,这个点代表在当前目录生成项目文件,不要忽略它。如果你不加这个点,Django 会再创建一个myblog子目录,结构就会变成myblog/myblog/,到时候运行服务器时总目录层级容易搞混。

执行完成后,用文件管理器或ls命令看一下当前目录,你会看到这样的结构:

myblog/ ├── manage.py └── myblog/ ├── __init__.py ├── settings.py ├── urls.py ├── asgi.py └── wsgi.py

这里简单解释一下每个文件的作用,方便你心里有数:

manage.py是一个命令行管理工具,以后所有和项目打交道的操作(启动服务器、创建应用、跑迁移)都要通过它来执行。settings.py是全局配置文件,里面放着数据库配置、应用列表、模板路径等核心信息。urls.py是 URL 路由的入口,项目层面的路由映射都在这里定义。asgi.py和wsgi.py则是项目部署时用到的服务器接口文件,前期开发阶段基本不需要碰。

3.2 写第一个视图函数

Django 遵循 MTV 模式,其中 V 指 View(视图)。它的角色是处理用户请求并返回响应。现在我们用最简单的方式,写一个返回文本的视图函数,把它放在项目的核心配置目录下。

直接用编辑器打开myblog/urls.py旁边的视图逻辑,这里有两种常见做法。一种是在urls.py里面直接写函数,另一种是建一个views.py文件专门放视图函数。为了养成好习惯,我建议用后者。我们在myblog项目同名子目录下新建一个views.py,内容如下:

from django.http import HttpResponse def index(request): return HttpResponse("你好,Django!这是我的第一个视图。")

这段代码做的事情非常直白:当一个 HTTP 请求被 Django 接收后,路由层会把这个请求传给index函数,index函数拿到请求后,直接返回一段文本内容作为响应。注意index必须接收一个request参数,这是 Django 的约定,这个参数里携带了请求相关的所有信息。

3.3 配置 URL 路由

写完视图函数,还得告诉 Django:用户在浏览器里输入什么网址时,应该执行这个函数。这个映射关系就在urls.py里配置。

打开项目子目录下的urls.py文件,按下面的方式修改:

from django.contrib import admin from django.urls import path from . import views urlpatterns = [ path('admin/', admin.site.urls), path('', views.index), ]

关键点是path('', views.index)。第一个参数''表示空路径,也就是访问站点根地址(比如http://127.0.0.1:8000/)时,直接执行views.index这个视图。第二个参数传的是视图函数对象,注意这里不要写成views.index(),加了括号就变成函数调用了,会在导入时直接执行,反而报错。

修完保存文件,这个项目就具备了完整的「请求进来 → 路由分发 → 视图处理 → 响应返回」的最小链路。

注意:路径配置里顺带的path('admin/', admin.site.urls)是 Django 自带的后台管理路由,默认就配好,不用删,前期保留即可。

4. 启动开发服务器,亲眼看到页面输出

代码都写好了,怎么知道对不对?答案就是启动 Django 自带的开发服务器。这个服务器是 Django 为了方便本地调试内置的,不用你去配 Nginx 或者 Apache,一条命令就能跑起来。

4.1 运行 runserver 命令

在myblog项目根目录下(目录里有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. ... Starting development server at http://127.0.0.1:8000/

这里有一段提示说 You have 18 unapplied migration(s),指的是 Django 内置的几个应用(admin、auth 等)还没有初始化数据库表。第一次跑项目时出现这个提示完全是正常的,因为我们还没执行数据库迁移,它不影响查看页面。不过为了白底少一些,后面我会专门跑一次python manage.py migrate来初始化内置数据表。

4.2 访问首页看到自己的第一个视图

现在打开浏览器,输入http://127.0.0.1:8000/,如果一切正常,你会在页面上看到一行字:「你好,Django!这是我的第一个视图。」

到这一步,你其实已经完成了 Django 从安装到第一个视图创建的全过程。不要小看这个最简单的页面,它背后已经跑通了浏览器请求、Django 路由分发、视图函数处理、HTTP 响应返回这一整条链路。后面不管你做多复杂的项目,这条链路永远是这个流程。

如果你在访问时发现页面 404 或者报错,也别急。下面这部分,我把自己实际调试过程中经常遇到的典型问题和排查思路整理成清单,按图索骥去定位会快很多。

4.3 常见报错与排查清单

现象常见原因解决办法
ModuleNotFoundError: No module named 'django'没有进入虚拟环境,或者 Django 装错环境了先确认命令行前缀有没有(venv),再用pip list查看一下 django 是否在列表里
Command 'django-admin' not foundDjango 安装不完整或虚拟环境未激活重新pip install django,并确认激活了虚拟环境
访问http://127.0.0.1:8000/显示 404urls.py里没有配置对应的path检查path('', views.index)是否写对,尤其确认''表示根路径
TypeError: index() got an unexpected keyword argument 'var'URL 里配置了变量参数,但视图函数没接收如果path里写了<var>, 视图函数必须加var参数
端口 8000 被占用上一个服务没有关闭,或其他程序占用了端口改端口启动:python manage.py runserver 8080
页面显示中文乱码浏览器编码识别异常开发前期可以给响应头加charset,如HttpResponse("你好", content_type="text/html; charset=utf-8")
You have unapplied migration(s)数据库还没有初始化内置表执行python manage.py migrate

另外,有一个很容易忽略的坑:如果你改了 Python 代码但页面没变化,可以确认一下终端窗口里的开发服务器是否还开着。Django 自带的热重载功能会在你保存代码后自动重载,但偶尔有极端情况(比如语法错误导致服务器崩溃)需要手动重启。按下 Ctrl + C 停掉服务,重新执行python manage.py runserver就可以了。

5. 收尾之前的必要一步:初始化内置数据表

前面 runserver 启动时提示未应用的迁移,虽然不影响当前页面展示,但既然我们要正经开始一个项目,这个步骤最好养成习惯。Django 自带的 admin、auth、sessions 等应用需要数据库表才能正常工作,把这些内置表建好,以后做用户登录、后台管理才不会踩坑。

在项目根目录下执行:

python manage.py migrate

执行完,终端会输出一串OK,说明相关数据表已经在数据库里建好了。默认情况下 Django 使用的是 SQLite 数据库,数据库文件就是项目根目录下生成的一个db.sqlite3文件。对于前期开发和练习来说,这个选择非常方便,因为你不需要安装任何额外的数据库服务,文件即库,后面需要换 MySQL 或 PostgreSQL 时,再改settings.py里的数据库配置即可。

执行完 migrate 之后,再启动一次服务器,你应该能看到终端输出里那行 migration 的警告消失了,页面也仍然正常显示。走到这里,你的 Django 项目已经是一个「身体健全」的最小可运行项目了。

6. 一些值得记住的细节,以及接下来可以做什么

每次分享到一个阶段的收尾,我都会整理一些零散但有用的心得。这里挑几条对新手最有用的说一说。

第一,settings.py里的LANGUAGE_CODE和TIME_ZONE默认值分别是en-us和UTC,如果你希望在后续开发中看到中文时区和语言环境,可以提前改成:

LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai'

第二,DEBUG默认是True,这是开发模式的核心开关。它决定了错误页面会不会输出详细报错信息。上线部署时一定要把它改成False,否则会有信息泄露风险。

第三,每创建一个新功能模块,建议用python manage.py startapp 应用名来建应用目录,而不是把什么都塞在项目的urls.py和views.py里。Django 项目里应用(app)和项目(project)是两个概念,一个项目可以包含多个应用,这种组织方式越早养成,后期写代码越轻松。

关于接下来可以做什么,我个人推荐两条路线:一是实现一个带模板渲染的页面,把HttpResponse换成render(request, 'index.html'),顺便学习模板语法;二是做一个简单的数据模型和数据库交互,比如写一个文章表,然后通过视图把数据库内容展示到页面上。这两条路线都串联着一整套 Django 核心玩法,是你迈入 Web 开发正规军的必经之路。

我在教身边几个朋友上手 Django 时,有一个共同的体会:凡是前期愿意把虚拟环境、版本兼容、项目结构这些「慢功夫」做扎实的人,后面学路由、模型、模板几乎都是一路畅通;凡是急着跳到某个框架功能上、不管环境直接开干的人,几乎都会在某个深夜被一个环境报错折磨得想摔键盘。写代码这件事,很多卡顿其实不是代码逻辑的问题,而是地基层面的问题。花二十分钟把环境做好,后面省下的可能是一整天。

最后分享一个小技巧,当你创建了一个 Django 项目模板,想在别的地方复用这些初始结构时,直接拷贝整个项目目录和manage.py就行,只要目标机器的 Python 版本和虚拟环境匹配,项目就能很顺地跑起来。这比你一步步重新startproject要高效得多。希望这篇实操总结能帮你把第一步走顺,接下来就看你自己动手了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询