了解Django模型,从基础到实战

在Django中,模型(Model)是连接逻辑和数据库的核心桥梁。它不仅可以帮我们抽象数据库表结构,还可以通过ORM技术让开发者脱离复杂的SQL语句,用Python代码即可轻松操作数据库这篇文章就让我们从基础到实战,一步步拆解Django模型

一、Django模型基础

在开始写代码之前,我们需要了解------什么是Django模型?它和ORM是什么关系?它为什么可以轻松操作数据库?

1.1 什么是Django模型

Django模型是对数据库表的抽象表示,每个模型都对应数据库中的一张表,模型的每个属性又对应表中的一个字段。简单来说,可以把模型理解为用Python类描述的数据库表,它的核心作用有下面四点:

①定义数据结构:明确表中有哪些字段、字段类型是什么

②提供数据库接口:不用写 SQL,直接用 Python 方法操作数据(增删改查)

③实现数据验证:自动校验字段值是否符合规则(比如字符串长度、数值范围)

④处理数据库关系:轻松维护表之间的一对一、一对多、多对多关系

1.2 模型与ORM

提到Django模型,一定绕不开ORM(Object Relational Mapping,对象关系映射);ORM 是一个 "中间层",它能把 Python 中的对象自动映射到数据库表,让你不用写一行 SQL,就能用 Python 语法操作数据库,让操作量减少;

Django自带的ORM有5大核心功能:

①映射Python对象到数据库表 ②自动生成SQL查询 ③处理表之间的关联关系

④内置数据验证规则 ⑤支持数据库迁移

1.3 模型与MySQL

Django支持多种数据库(SQLite,MySQL等等),其中MySQL是web开发中最常用的关系型数据库,下面来一步步配置Django模型来使用MySQL

(1)安装MySQL驱动

bash 复制代码
# 方式 1:安装 pymysql(兼容性好,推荐新手)
pip install pymysql

# 方式 2:安装 mysqlclient(性能更优,部分系统需提前装依赖)
pip install mysqlclient

(2)配置数据库连接

打开项目中的 settings.py 文件,找到DATABASES配置项,修改为MySQL连接信息

python 复制代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 数据库引擎(固定值)
        'NAME': 'mydatabase',  # 你要连接的数据库名(需提前在 MySQL 中创建)
        'USER': 'myuser',      # MySQL 用户名(如 root)
        'PASSWORD': 'mypassword',  # MySQL 密码
        'HOST': 'localhost',   # 数据库地址(本地默认 localhost)
        'PORT': '3306'         # MySQL 端口(默认 3306)
    }
}

二、Django模型入门:从定义到使用

了解完上面所说的基础后,我们可以来实战一个简单的图书模型

2.1 第一步:定义模型

Django模型必须写在APP的 models.py 文件中,并且模型类要继承django.db.models.Model

以图书为例,我们定义包含"标题、作者、出版日期、价格"的模型:

python 复制代码
from django.db import models

class Book(models.Model):
    """图书模型:存储图书的核心信息"""
    # 标题:字符串类型,最大长度 200(CharField 必须指定 max_length)
    title = models.CharField(max_length=200)
    # 作者:字符串类型,最大长度 100
    author = models.CharField(max_length=100)
    # 出版日期:日期类型
    publication_date = models.DateField()
    # 价格:十进制类型(max_digits 总位数,decimal_places 小数位数)
    price = models.DecimalField(max_digits=5, decimal_places=2)

    def __str__(self):
        """返回模型对象的字符串表示(在 admin 后台和终端中显示)"""
        return self.title  # 这里返回书名,方便识别

模型代码的核心规则:①类必须继承models.Model

②每个属性对应一个数据库字段 ③__str__ 用于友好显示对象信息,推荐写

2.2 第二步:使用模型的6个关键步骤

定义好模型后,需要经过下面的步骤才能真正用起来

(1)创建迁移文件

迁移文件是Django用于记录模型变化的"中间文件",执行以下命令生成

bash 复制代码
# 格式:python manage.py makemigrations [App名]
python manage.py makemigrations myapp

执行后,会在 myapp/migrations 目录下生成类似 0001_initial.py 的文件,记录模型的初始结构

(2)应用迁移(同步到数据库)

迁移文件成功后,需要执行以下命令,将模型结构同步到MySQL数据库(自动创建表)

bash 复制代码
python manage.py migrate myapp

执行成功后,MySQL中会新增 myapp_book 表(默认表名:App名_模型名小写)

(3)在视图中查询模型数据

视图是处理业务逻辑的核心,我们可以在视图中通过模型的API查询数据:

python 复制代码
# myapp/views.py
from django.shortcuts import render
from .models import Book  # 导入 Book 模型

def book_list(request):
    """图书列表视图:查询所有图书并传给模板"""
    # 查询所有图书(等价于 SQL:SELECT * FROM myapp_book)
    books = Book.objects.all()
    # 将数据传给模板(上下文变量 books)
    return render(request, 'books/list.html', {'books': books})

(4)在模版中展示数据

模版负责前端渲染,我们用Django模版语法遍历展示图书数据:

html 复制代码
<!-- templates/books/list.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>图书列表</title>
</head>
<body>
    <h1>我的图书库</h1>
    <!-- 判断是否有图书数据 -->
    {% if books %}
        {% for book in books %}
            <div style="margin: 10px 0;">
                <h3>{{ book.title }}</h3>
                <p>作者:{{ book.author }}</p>
                <p>价格:¥{{ book.price }}</p>
                <!-- 若有出版日期则显示 -->
                {% if book.publication_date %}
                    <p>出版日期:{{ book.publication_date }}</p>
                {% endif %}
            </div>
        {% endfor %}
    {% else %}
        <p>暂无图书数据,快去 Admin 后台添加吧!</p>
    {% endif %}
</body>
</html>

(5)配置URL路由

最后,将视图和URL绑定,让用户能够访问到图书列表页:

python 复制代码
# myapp/urls.py
from django.urls import path
from . import views

urlpatterns = [
    # 路径:/books/ → 对应 book_list 视图,name 用于反向解析
    path('books/', views.book_list, name='book_list'),
]

同时,需要在项目的主 urls.py 中包含这个App的路由:

python 复制代码
# 项目主 urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myapp.urls')),  # 包含 myapp 的路由
]

(6)启动项目进行测试

在终端执行命令 python manage.py runserver 启动项目,访问 http://127.0.0.1:8000/books/,就能看到图书列表啦!

相关推荐
茯苓gao2 小时前
CAN总线学习(四)错误处理 STM32CAN外设一
网络·笔记·stm32·单片机·学习
qq7422349843 小时前
语音识别:PyAudio、SoundDevice、Vosk、openai-whisper、Argos-Translate、FunASR(Python)
python·whisper·语音识别
曾经的三心草3 小时前
OpenCV2-图像基本操作-阈值与平滑处理-形态学-梯度运算
python·opencv
xiangzhihong83 小时前
Spring Boot实现文字转语音功能
开发语言·python
虚行3 小时前
C#上位机 通过ProfitNet连接西门子PLC教程--系统模拟环境搭建
学习·c#·plc
jun~4 小时前
SQLMap数据库枚举靶机(打靶记录)
linux·数据库·笔记·学习·安全·web安全
月盈缺4 小时前
学习嵌入式的第四十二天——ARM——UART
arm开发·学习
天才测试猿4 小时前
postman使用总结
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
可触的未来,发芽的智生4 小时前
新奇特:神经网络烘焙坊(下),万能配方的甜蜜奥义
人工智能·python·神经网络·算法·架构