Django 框架入门指南:从零开始构建 Web 应用

1. 引言

Django 是一个高级 Python Web 框架,它鼓励快速开发和干净、实用的设计。由经验丰富的开发者构建,它处理了 Web 开发中的许多麻烦事,让你能够专注于编写应用,而无需重新发明轮子。它是免费且开源的,拥有一个庞大而活跃的社区,非常活跃。

如果你正在寻找一个功能全面、自带管理后台、ORM(对象关系映射)和强大安全特性的框架,Django 是一个非常值得考虑的选择。本文将带你从零开始,了解 Django 的核心概念,并动手构建你的第一个 Web 应用。

2. 为什么选择 Django?

在众多 Python Web 框架(如 Flask、FastAPI)中,Django 以其「全家桶」式的设计理念独树一帜。它提供了 Web 开发中几乎所有常用的组件,让你无需在第三方库的选择上花费过多精力。

  • 自带管理后台:Django 会根据你的数据模型自动生成一个功能完善的后台管理界面,极大地提高了内容管理的效率。
  • 强大的 ORM:通过 Python 代码操作数据库,无需编写繁琐的 SQL 语句,支持多种数据库后端(如 SQLite、PostgreSQL、MySQL)。
  • 完善的安全机制:内置了对 SQL 注入、XSS(跨站脚本攻击)、CSRF(跨站请求伪造)等常见网络攻击的防护。
  • 可扩展性:虽然自带很多组件,但 Django 的设计也允许你灵活地替换或扩展,使用第三方应用来满足特定需求。
  • 活跃的社区:拥有海量的第三方包、详尽的官方文档和丰富的学习资源,遇到问题很容易找到解决方案。

3. 环境准备与安装

在开始之前,请确保你的电脑上已经安装了 Python 3.8 或更高版本。推荐使用虚拟环境来隔离项目依赖。

首先,创建并激活虚拟环境:

bash 复制代码
# 创建虚拟环境
python -m venv myenv

# 激活虚拟环境(Windows)
myenv\Scripts\activate

# 激活虚拟环境(macOS / Linux)
source myenv/bin/activate

接下来,使用 pip 安装 Django:

bash 复制代码
pip install django

安装完成后,可以通过以下命令验证 Django 是否安装成功:

bash 复制代码
python -m django --version

4. 创建第一个 Django 项目

Django 使用命令行工具来管理项目。打开终端,进入你想要存放项目的目录,运行以下命令创建一个名为 mysite 的项目:

bash 复制代码
django-admin startproject mysite

这个命令会生成一个名为 mysite 的目录,其内部结构如下:

text 复制代码
mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
  • manage.py:一个命令行工具,用于与 Django 项目进行各种交互(如运行开发服务器、创建应用等)。
  • mysite/settings.py:项目的配置文件,包含数据库设置、应用注册、静态文件路径等。
  • mysite/urls.py:URL 声明,相当于网站的「目录」,负责将 URL 请求路由到对应的视图函数。
  • mysite/asgi.pymysite/wsgi.py:用于部署项目的 ASGI 和 WSGI 入口点。

进入项目目录并启动开发服务器:

bash 复制代码
cd mysite
python manage.py runserver

在浏览器中访问 http://127.0.0.1:8000/,你会看到一个欢迎页面,恭喜你,你的第一个 Django 项目已经成功运行了!

5. 创建应用与理解 MTV 架构

Django 采用 MTV(Model-Template-View)架构模式,这是对传统 MVC(Model-View-Controller)的一种变体。理解这个模式是掌握 Django 的关键。

  • Model(模型):定义数据结构,负责与数据库交互。每个模型类对应数据库中的一张表。
  • Template(模板):负责呈现数据,是 HTML 文件,其中可以嵌入 Django 模板语言(DTL)来动态显示内容。
  • View(视图):负责业务逻辑,接收 HTTP 请求,从 Model 中获取数据,并将其传递给 Template 渲染,最终返回 HTTP 响应。

一个项目通常由多个「应用」(App)组成,每个应用负责一个特定的功能模块。创建一个名为 blog 的应用:

bash 复制代码
python manage.py startapp blog

创建后,需要在 mysite/settings.pyINSTALLED_APPS 列表中注册这个新应用:

python 复制代码
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',  # 新增
]

6. 定义模型(Model)

blog/models.py 中定义一个简单的文章模型:

python 复制代码
from django.db import models

class Article(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

这个模型定义了三个字段:标题(CharField)、内容(TextField)和发布日期(DateTimeField)。__str__ 方法用于在后台管理中显示更友好的对象名称。

接下来,生成数据库迁移文件并执行迁移,将模型同步到数据库:

bash 复制代码
python manage.py makemigrations blog
python manage.py migrate

7. 编写视图(View)与配置 URL

视图函数接收一个 HttpRequest 对象,并返回一个 HttpResponse 对象。在 blog/views.py 中编写一个简单的视图,用于显示所有文章:

python 复制代码
from django.shortcuts import render
from .models import Article

def article_list(request):
    articles = Article.objects.all().order_by('-pub_date')
    return render(request, 'blog/article_list.html', {'articles': articles})

现在,我们需要将 URL 与这个视图关联起来。在 blog 应用目录下创建一个新的 urls.py 文件:

python 复制代码
from django.urls import path
from . import views

urlpatterns = [
    path('', views.article_list, name='article_list'),
]

然后,在项目的 mysite/urls.py 中包含这个应用的 URL 配置:

python 复制代码
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
]

8. 创建模板(Template)

blog 应用目录下创建 templates/blog/ 目录,并在其中新建 article_list.html 文件:

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>我的博客</title>
</head>
<body>
    <h1>文章列表</h1>
    <ul>
        {% for article in articles %}
        <li>
            <h2>{{ article.title }}</h2>
            <p>{{ article.content }}</p>
            <small>{{ article.pub_date }}</small>
        </li>
        {% endfor %}
    </ul>
</body>
</html>

Django 模板语言使用 {% %} 表示逻辑控制(如循环、判断),使用 {``{ }} 输出变量。

9. 使用 Django 管理后台

Django 自带的管理后台是它的一大亮点。首先,创建一个超级用户:

bash 复制代码
python manage.py createsuperuser

按照提示输入用户名、邮箱和密码。然后,在 blog/admin.py 中注册我们的模型:

python 复制代码
from django.contrib import admin
from .models import Article

admin.site.register(Article)

启动开发服务器,访问 http://127.0.0.1:8000/admin/,使用刚才创建的超级用户登录,你就可以通过图形化界面来添加、编辑和删除文章了。

10. 总结与下一步

本文带你走完了 Django 开发的一个完整流程:从环境搭建、创建项目,到定义模型、编写视图、创建模板,再到使用强大的管理后台。这只是一个开始,Django 的世界还有更多精彩内容等待你去探索。

接下来,你可以尝试:

  • 学习使用 Django 的表单(Forms)来处理用户输入。
  • 深入了解 Django 的认证系统,实现用户注册和登录。
  • 使用 Django REST Framework 来构建 RESTful API。
  • 学习如何将 Django 应用部署到生产环境(如使用 Gunicorn + Nginx)。

Django 的官方文档非常详尽,是学习的最佳资源。祝你编码愉快!

相关推荐
daols881 小时前
vue 甘特图 vxe-gantt 紧前紧后依赖关系连接线配置详解
前端·vue.js·甘特图
恋猫de小郭1 小时前
Flutter iOS 的深度优化 PR,搞笑的是贡献者被 Gemini 评审折磨
android·前端·flutter
智搜广告1 小时前
AI回答优化公司智搜广告让品牌成为推荐首选
大数据·人工智能·python·elasticsearch·geo
Three_ST1 小时前
沐神-动手学习深度学习-习题 4.3. 多层感知机的简洁实现
人工智能·pytorch·python·深度学习·机器学习
必须会一定会1 小时前
Agent Handoff M5 发布验收:`CHANGES.md`、`npm pack`、`release:check` 与干净环境安装验证
前端·人工智能·npm·node.js·ai编程
2601_954811821 小时前
AI通识课跨设备联调难题:协议兼容层设计与教学联动架构优化
人工智能·python·架构
天天爱吃肉82181 小时前
XCP协议 Part 1 概述 — 完整学习笔记(商用车主机厂工程师版)
大数据·笔记·python·学习·汽车
黑马水牛1 小时前
Carla仿真系列:10_Carla 双目障碍物测距,视差图还原真实距离
python·计算机视觉·ros·双目·carla仿真
SamChan901 小时前
PDF 翻译服务的全链路可观测性设计:OpenTelemetry + Jaeger + Loki 实战方案
后端·python·pdf·机器翻译