Django

Django从入门到上手

Django Learning

1. 背景

Django是一个用于构建Web应用程序的高级Python Web框架。Django提供了一套强大的工具和约定,使得开发者能够快速构建功能齐全,易于维护的网站。Django提供了一套强大的工具. Django遵守BSD版权,初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1.0

BSD (Berkeley Software Distribution license) 是一种宽松的开源许可证,允许用户自由使用、修改和分发软件,甚至可以将代码用于闭源商业产品,但要求再发布时必须包含原始版权声明和许可证副本,并且不能使用原作者姓名进行推广,它介于严格的版权(Copyright)和带有强制开源要求的 GPL许可证 之间,对商业应用非常友好。

Django

Django

Django 提供了全栈开发所需的工具,包括数据库 ORM、模板引擎、路由系统、用户认证等,大幅减少重复代码。

Django 的哲学:

  • DRY(Don’t Repeat Yourself): 避免重复代码,提倡复用(如模板继承、模型继承)。
  • 约定优于配置: 默认提供合理配置(如自动生成 Admin 界面),减少决策成本。
  • 快速开发: 从原型到生产环境均可高效推进。

Django 遵循 MVC(Model-View-Controller)架构,但在 Django 中更常被称为 MTV(Model-Template-View)。

NVT pattern

NVT pattern
功能 说明
Admin 后台 自动生成管理界面,无需手动编写 CRUD 逻辑
ORM 使用 Python 类操作数据库,无需直接编写 SQL
表单处理 内置表单验证机制,并默认防止 CSRF 攻击
用户认证 提供完整的登录、注册、权限与用户管理(django.contrib.auth
路由系统 URL 映射灵活,支持参数与正则表达式
缓存机制 支持多种缓存后端,如 Memcached、Redis 等

核心特点:

  • 快速开发:Django 提供了丰富的内置功能,如 ORM、Admin 后台、表单处理、用户认证等,可以大大加速开发过程。
  • 自动化管理后台:只需要简单的模型定义,即可生成强大的后台管理界面,支持增删查改
  • ORM数据库映射: ORM (Object-Relational Mapping),可以让开发者使用 Python 类与数据库交互,无需编写 SQL
  • 强大的 URL 路由:使用正则表达式灵活定义 URL,轻松实现页面路由。
  • 模板引擎:内置强大的模板系统,支持逻辑判断、循环处理,方便渲染 HTML 页面
  • 高安全性:内置多种安全保护措施,如防止 SQL 注入、XSS 攻击、CSRF 攻击等
  • 丰富的社区与扩展:大量开源的第三方库,如 Django REST framework、Django CMS 等,快速扩展功能

MVC与MTV模型

MVC

MVC

MVC (Model-View-Controller)

  • Model:模型,负责与数据库交互,处理数据。
  • View:视图,负责渲染页面,展示数据。
  • Controller:控制器,负责接收用户请求,调用模型处理数据,并返回视图。

MTV (Model-Template-View)

  • Model:模型,负责与数据库交互,处理数据。
  • Template:模板,负责渲染页面,展示数据。
  • View:视图,负责接收用户请求,调用模型处理数据,并返回模板。

流程

  1. 用户请求 URL,Django 根据 URL 配置找到对应的视图函数。
  2. View 处理业务逻辑,调用 Model 获取数据
  3. View 将数据传递给 Template。
  4. Template 渲染 HTML,最终返回给用户。

Django使用场景

  • 内容管理系统(CMS)(如新闻网站、博客)
  • 社交平台(用户系统、动态发布)
  • 电子商务网站(订单管理、支付集成)
  • API 后端(结合 Django REST framework)

2. 安装

2.1 安装Python

Django是一个用于Python的网络框架,不同版本的Django需要对应不同版本Python

Django 版本 支持的 Python 版本
4.2 3.8, 3.9, 3.10, 3.11, 3.12(4.2.8 添加)
5.0 3.10, 3.11, 3.12
5.1 3.10, 3.11, 3.12, 3.13(5.1.3 添加)
5.2 3.10, 3.11, 3.12, 3.13, 3.14(5.2.8 添加)
6.0 3.12, 3.13, 3.14

Python中包含了一个SQLite轻量级数据库,可以暂时使用,安装好Python之后,后续安装uv,参考之前的文档,进行uv的安装,进行环境和包管理

2.2 安装Djaogo

使用uv安装Django,可以直接安装到虚拟环境中,也可以激活环境之后自行安装,但是要自己把软件写到pyproject.tmol文件中

# uv add
uv add django

# uv install
uv pip install django=5.2.10

2.3 启动项目

安装好Django之后,使用基础命令,创建一个文件夹,生成项目

django-admin startproject mysite djangotutorial
djangotutorial/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
  • manage.py: 一个让你用各种方式管理 Django 项目的命令行工具
  • mysite/: 一个目录,它是你项目的实际 Python 包。它的名称是你需要用来导入其中任何内容的 Python 包名称(例如 mysite.urls)。
  • mysite/init.py:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。
  • mysite/settings.py: Settings/configuration for this Django project. Django 配置 will tell you all about how settings work.
  • mysite/urls.py:Django 项目的 URL 声明,就像你网站的“目录”
  • mysite/asgi.py:作为你的项目的运行在 ASGI 兼容的 Web 服务器上的入口
  • mysite/wsgi.py:作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。

2.4 设置数据库

在Django中,数据库是其核心功能之一,Django通过ORM让开发者可以使用Python代码而不是SQL来操作数据库

  1. 安装PostgreSQL

sudo apt update sudo apt install postgresql postgresql-contrib

brew install postgresql brew services start postgresql

  1. 创建用户和数据库

启动postgresql,然后在数据库中输入,下面的命令,进行创建

CREATE DATABASE mydb; # 创建数据库名称 CREATE DATABASE
CREATE USER myuser WITH PASSWORD 'strong_password'; # 创建账户myuser和密码 CREATE ROLE
ALTER ROLE myuser SET client_encoding TO 'utf8'; # 设置客户端字符编码
ALTER ROLE myuser SET default_transaction_isolation TO 'read committed'; # 设置 默认事务隔离级别
ALTER ROLE myuser SET timezone TO 'UTC'; # 设置 数据库会话的时区
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser; # 给用户 myuser 操作数据库 mydb 的权限
  1. 安装数据库与Django驱动
包名 实际版本 状态
psycopg2 psycopg v2 老牌、稳定、逐步淘汰
psycopg psycopg v3 新一代、官方推荐
psycopg[binary] psycopg v3 + 预编译二进制 最推荐安装方式
# uv install
uv add 'psycopg[binary]'

# 验证是否安装成功
python -c "import psycopg; print(psycopg.__version__)"
  1. 配置Django连接PostgreSQL

settings.py中,配置数据库

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": "studentscores_db",
        "USER": "studentscores_user",
        "PASSWORD": os.getenv("POSTGRES_PASSWORD"),
        "HOST": "127.0.0.1",
        "PORT": "5432",
    }
}
  1. 测试Django数据库连接
# 数据库表结构
uv run python manage.py migrate

# 创建超级管理者
uv run python manage.py createsuperuser

uv run python manage.py migrate 是把 Django 里的“模型定义”真正变成数据库里的“表结构”

Note

makemigrations = 生成“数据库变更说明书” migrate = 按说明书真正改数据库

# 使用uv启动项目
uv run manage.py runservver

进入127.0.0.1:8000/admin能进入超级用户权限即表示安装成功

Note

用于开发的服务器在需要的情况下会对每一次的访问请求重新载入一遍 Python 代码。所以你不需要为了让修改的代码生效而频繁的重新启动服务器。然而,一些动作,比如添加新文件,将不会触发自动重新加载,这时你得自己手动重启服务器。

3. 创建项目app

现在你的开发环境–这个“项目”—配置好了,你就可以真正干活了

在 Django 中,每一个应用都是一个 Python 包,并且遵循着相同的约定。Django 自带一个工具,可以帮你生成应用的基础目录结构,这样你就能专心写代码,而不是创建目录了

Tip

项目和应用有什么区别?应用是一个专门做某件事的网络应用程序——比如博客系统,或者公共记录的数据库,或者小型的投票程序。项目则是一个网站使用的配置和应用的集合。项目可以包含很多个应用。应用可以被很多个项目使用。

3.1 创建应用App

应用App是功能的基本组织单位,一个项目中可以包含多个应用,各个

将bash切换到manage.py目录下,然后执行下面的命令来创建一个应用

# python创建,切换环境
python manage.py startapp polls

# uv,不切换环境
uv run manage.py startapp polls

Django将自动创建polls的目录,布局如下

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py