如何快速上手Django?3 小时从 0 到 1 做出第一个 Web 项目(小白友好版)

Django 的核心优势是 "开箱即用",不用纠结复杂配置,跟着 "环境搭建→创建项目→核心功能实现→运行测试" 的步骤走,新手也能快速落地成果,下面用最通俗的操作和案例,帮你快速入门:

一、前期准备:搞定 3 个基础(10 分钟)

1. 安装 Python(必备)

Django 是 Python 框架,先确保电脑装了 Python 3.8 及以上版本(推荐 3.10):

  • 下载地址:Python 官网(安装时勾选 "Add Python to PATH",自动配置环境变量);
  • 验证:打开命令行(Windows cmd / 终端),输入python --version,显示版本号即成功。

2. 安装 Django(一行命令)

命令行输入以下命令,自动安装最新版 Django:

bash

运行

复制代码
pip install django

验证:输入django-admin --version,显示版本号(比如 5.0.1)即安装成功。

3. 选一个代码编辑器(推荐)

新手用 VS Code(免费、轻量,装 "Python""Django" 插件),或 PyCharm(专业版对 Django 支持更好,社区版足够入门),不用复杂配置,打开文件夹就能写代码。

二、核心步骤:3 小时做出 "个人博客"(实战案例)

我们以 "简单个人博客" 为目标,实现 3 个核心功能:① 显示文章列表 ② 查看文章详情 ③ 后台管理文章(增删改查),全程不用写复杂代码。

步骤 1:创建 Django 项目和应用(15 分钟)

Django 项目是 "总工程",应用(App)是 "功能模块"(比如博客、用户系统),一个项目可以包含多个应用。

(1)创建项目

命令行切换到你想存放项目的文件夹(比如cd 桌面/学习),输入以下命令,创建名为myblog的项目:

bash

运行

复制代码
django-admin startproject myblog

执行后,桌面会出现myblog文件夹,内部结构是 Django 自动生成的,不用手动改:

plaintext

复制代码
myblog/          # 项目根目录
  manage.py      # 命令行工具(启动服务、创建应用等)
  myblog/        # 项目核心配置文件夹
    settings.py  # 项目配置(数据库、插件等)
    urls.py      # 路由配置(网址→对应功能)
    wsgi.py      # 服务器适配(不用管)
    asgi.py      # 异步服务(不用管)
(2)创建 "博客" 应用

进入项目根目录(先cd myblog),输入命令创建名为blog的应用:

bash

运行

复制代码
python manage.py startapp blog

执行后,项目里会新增blog文件夹,这是我们写博客功能的核心目录:

plaintext

复制代码
blog/
  migrations/    # 数据库迁移文件(自动生成)
  models.py      # 数据模型(定义文章、用户等数据结构)
  views.py       # 业务逻辑(处理用户请求,返回内容)
  urls.py        # 应用路由(博客相关网址配置)
  admin.py       # 后台管理配置(注册模型,自动生成后台)
  apps.py        # 应用配置(不用改)
  tests.py       # 测试代码(入门不用管)
(3)注册应用(关键步骤)

打开myblog/settings.py(项目配置文件),找到INSTALLED_APPS列表,添加'blog'(应用名),告诉 Django "我要用到这个应用":

python

运行

复制代码
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',  # 新增这一行,注册博客应用
]

步骤 2:定义数据模型(20 分钟)

数据模型就是 "数据库表的设计",用 Python 类定义,Django 会自动生成数据库表,不用写 SQL。打开blog/models.py,写一个Article类(代表 "博客文章"),包含标题、内容、发布时间 3 个字段:

python

运行

复制代码
from django.db import models

# 博客文章模型
class Article(models.Model):
    # 标题:字符串类型,最大长度100
    title = models.CharField(max_length=100)
    # 内容:文本类型(可存长文本)
    content = models.TextField()
    # 发布时间:自动记录创建时间(新增文章时不用手动填)
    pub_time = models.DateTimeField(auto_now_add=True)

    # 后台显示文章标题(默认显示对象名,不直观)
    def __str__(self):
        return self.title
(1)生成数据库表

命令行执行以下 2 条命令,Django 会自动根据模型创建数据库表:

bash

运行

复制代码
# 1. 生成迁移文件(记录模型变更)
python manage.py makemigrations
# 2. 执行迁移(创建/更新数据库表)
python manage.py migrate

执行后,项目里会生成db.sqlite3文件(默认数据库,不用管),文章表就创建好了。

(2)注册模型到后台(自动生成管理页面)

打开blog/admin.py,注册Article模型,Django 会自动生成 "文章管理" 的后台页面:

python

运行

复制代码
from django.contrib import admin
from .models import Article  # 导入Article模型

# 注册模型(默认生成增删改查功能)
admin.site.register(Article)
(3)创建超级管理员(登录后台用)

命令行输入以下命令,按提示设置用户名、邮箱、密码(密码输入时不显示,正常输入即可):

bash

运行

复制代码
python manage.py createsuperuser

比如设置:用户名admin,密码123456(测试用,正式项目用复杂密码)。

步骤 3:实现 "显示文章列表" 功能(30 分钟)

(1)写视图函数(处理请求,返回数据)

打开blog/views.py,定义article_list函数,查询所有文章,传给前端页面:

python

运行

复制代码
from django.shortcuts import render
from .models import Article  # 导入模型

# 文章列表视图
def article_list(request):
    # 查询所有文章(按发布时间倒序,最新的在前面)
    articles = Article.objects.all().order_by('-pub_time')
    # 把文章数据传给前端页面('articles'是前端用的变量名)
    return render(request, 'blog/article_list.html', {'articles': articles})
(2)创建前端模板(页面样式)

Django 的模板的是 HTML 文件,能嵌入 Python 变量和逻辑,步骤:

  1. blog文件夹下,新建templates文件夹(必须叫这个名);
  2. templates下新建blog文件夹(避免和其他应用模板冲突);
  3. blog/templates/blog/下新建article_list.html文件,写页面代码:

html

预览

复制代码
<!DOCTYPE html>
<html>
<head>
    <title>我的博客</title>
    <meta charset="utf-8">
    <style>
        /* 简单样式,让页面好看点 */
        .container { width: 800px; margin: 0 auto; }
        .article { margin: 20px 0; padding: 10px; border: 1px solid #eee; }
        .title { font-size: 20px; color: #2c3e50; }
        .time { color: #999; font-size: 14px; }
    </style>
</head>
<body>
    <div class="container">
        <h1>我的博客</h1>
        <!-- 循环显示所有文章 -->
        {% for article in articles %}
        <div class="article">
            <h2 class="title">{{ article.title }}</h2>  <!-- 显示文章标题 -->
            <p class="time">发布时间:{{ article.pub_time|date:"Y-m-d H:i" }}</p>  <!-- 格式化时间 -->
            <p>{{ article.content|truncatechars:100 }}</p>  <!-- 只显示前100字 -->
            <!-- 文章详情链接(后面会实现) -->
            <a href="/article/{{ article.id }}/">查看全文</a>
        </div>
        {% empty %}
        <p>暂无文章,快去后台添加吧!</p>  <!-- 没有文章时显示 -->
        {% endfor %}
    </div>
</body>
</html>

模板语法说明:{``{ 变量名 }}显示数据,{% 逻辑 %}写循环 / 判断,不用懂复杂前端,复制修改即可。

(3)配置路由(网址→视图函数)

路由就是 "用户访问哪个网址,对应哪个功能",分 2 步:

  1. 应用路由(blog/urls.py):新建urls.py文件,配置博客相关路由:

python

运行

复制代码
from django.urls import path
from .views import article_list  # 导入视图函数

urlpatterns = [
    # 访问 "/article/list/" 时,调用article_list视图
    path('list/', article_list, name='article_list'),
]
  1. 项目路由(myblog/urls.py):把应用路由注册到项目,让 Django 识别:

python

运行

复制代码
from django.contrib import admin
from django.urls import path, include  # 导入include

urlpatterns = [
    path('admin/', admin.site.urls),  # 后台管理网址(默认)
    # 访问 "/article/" 开头的网址,交给blog应用的urls处理
    path('article/', include('blog.urls')),
]

步骤 4:实现 "文章详情" 功能(20 分钟)

(1)写详情视图函数

打开blog/views.py,新增article_detail函数,根据文章 ID 查询单篇文章:

python

运行

复制代码
from django.shortcuts import render, get_object_or_404  # 新增get_object_or_404
from .models import Article

# 文章详情视图(接收文章ID参数)
def article_detail(request, article_id):
    # 根据ID查询文章,不存在则返回404页面
    article = get_object_or_404(Article, id=article_id)
    # 把文章数据传给详情页模板
    return render(request, 'blog/article_detail.html', {'article': article})
(2)创建详情页模板

blog/templates/blog/下新建article_detail.html

html

预览

复制代码
<!DOCTYPE html>
<html>
<head>
    <title>{{ article.title }}</title>
    <meta charset="utf-8">
    <style>
        .container { width: 800px; margin: 0 auto; }
        .title { color: #2c3e50; text-align: center; }
        .time { color: #999; text-align: center; }
        .content { margin: 20px 0; line-height: 1.8; }
        a { color: #3498db; text-decoration: none; }
    </style>
</head>
<body>
    <div class="container">
        <h1 class="title">{{ article.title }}</h1>
        <p class="time">发布时间:{{ article.pub_time|date:"Y-m-d H:i" }}</p>
        <div class="content">{{ article.content|linebreaks }}</div>  <!-- 换行显示内容 -->
        <a href="/article/list/">返回列表</a>
    </div>
</body>
</html>
(3)配置详情页路由

打开blog/urls.py,新增详情页路由(接收article_id参数):

python

运行

复制代码
from django.urls import path
from .views import article_list, article_detail  # 导入详情视图

urlpatterns = [
    path('list/', article_list, name='article_list'),
    # 访问 "/article/1/" 时,调用article_detail,article_id=1
    path('<int:article_id>/', article_detail, name='article_detail'),
]

步骤 5:运行项目,测试效果(10 分钟)

(1)启动开发服务器

命令行输入以下命令,启动 Django 内置的开发服务器:

bash

运行

复制代码
python manage.py runserver

出现 "Starting development server at http://127.0.0.1:8000/" 即成功,不要关闭命令行。

(2)访问测试

打开浏览器,输入以下网址,查看效果:

  1. 后台管理:http://127.0.0.1:8000/admin/ → 用之前创建的超级管理员账号(admin/123456)登录,能看到 "Articles" 模块,可新增、编辑、删除文章;
  2. 文章列表:http://127.0.0.1:8000/article/list/ → 能看到后台添加的文章,没有文章则显示 "暂无文章";
  3. 文章详情:点击列表页的 "查看全文",能跳转到详情页,显示完整文章内容。

步骤 6:常见问题排查(新手必看)

  • 启动服务器报错 "端口被占用":换端口启动,命令python manage.py runserver 8080,访问时用http://127.0.0.1:8080/
  • 访问页面 404:检查路由配置(urls.py的路径是否正确)、模板文件夹路径是否是 "templates/blog/";
  • 后台看不到模型:检查admin.py是否注册了模型,是否执行了makemigrationsmigrate命令;
  • 模板不显示数据:检查视图函数是否传递了变量(比如{'articles': articles}),模板里的变量名是否和视图一致。

三、后续学习:3 个方向快速进阶(可选)

  1. 完善功能 :添加用户登录(用 Django 自带的auth模块)、评论功能(新增Comment模型)、分类标签;
  2. 优化页面:用 Bootstrap 替换自定义样式(不用写 CSS,直接用现成组件),让页面更美观;
  3. 部署上线:学习把项目部署到服务器(比如阿里云、腾讯云),让别人能通过公网访问你的博客。

总结

快速上手 Django 的核心是 "先做最小可行项目 "------ 不用先学所有模块,先通过 "模型→视图→模板→路由" 的流程,做出能运行的功能,再逐步扩展。Django 的 "开箱即用" 特性让你不用纠结底层,专注业务逻辑,按上面的步骤走,3 小时就能体验从 0 到 1 的成就感,后续再结合官方文档(Django 中文文档)补充细节即可~

相关推荐
web小白成长日记1 小时前
深入理解 React 中的 Props:组件通信的桥梁
前端·javascript·react.js
tjswk20081 小时前
在ios上动态插入元素的列表使用:last-child样式可能不能及时生效
前端
小小荧1 小时前
CSS 写 SQL 查询?后端慌了!
前端·sql
小高0071 小时前
🔥3 kB 换 120 ms 阻塞? Axios 还是 fetch?
前端·javascript·面试
千寻girling1 小时前
面试官 : “ Vue 选项式api 和 组合式api 什么区别? “
前端·vue.js·面试
小二·2 小时前
从零手写《超级玛丽》——前端 Canvas 游戏开发与物理引擎
前端·游戏
da_vinci_x2 小时前
【2D场景】16:9秒变21:9?PS “液态缩放” + AI 补全,零成本适配全面屏
前端·人工智能·游戏·aigc·设计师·贴图·游戏美术
南知意-2 小时前
3.3K Star ! 超级好用开源大屏设计器!
前端·开源·开源项目·工具·大屏设计
华仔啊2 小时前
Vue 组件通信的 8 种最佳实践,你知道几种?
前端·vue.js