实用指南:了解Django模型,从基础到实战

news/2025/10/24 16:10:38/文章来源:https://www.cnblogs.com/yxysuanfa/p/19163663

        在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驱动

# 方式 1:安装 pymysql(兼容性好,推荐新手)
pip install pymysql
# 方式 2:安装 mysqlclient(性能更优,部分系统需提前装依赖)
pip install mysqlclient

(2)配置数据库连接

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

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

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

from django.db import models
class Book(models.Model):"""图书模型:存储图书的核心信息"""# 标题:字符串类型,最大长度 200(CharField 必须指定 max_length)title = models.CharField(max_length=200)# 作者:字符串类型,最大长度 100author = 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用于记录模型变化的“中间文件”,执行以下命令生成

# 格式:python manage.py makemigrations [App名]
python manage.py makemigrations myapp

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

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

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

python manage.py migrate myapp

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

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

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

# 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模版语法遍历展示图书数据:

图书列表

我的图书库

{% if books %}{% for book in books %}

{{ book.title }}

作者:{{ book.author }}

价格:¥{{ book.price }}

{% if book.publication_date %}

出版日期:{{ book.publication_date }}

{% endif %}
{% endfor %}{% else %}

暂无图书数据,快去 Admin 后台添加吧!

{% endif %}

(5)配置URL路由

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

# 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的路由:

# 项目主 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/,就能看到图书列表啦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/945424.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 轻松在 PDF 中插入页眉页脚 - E

在制作 PDF 文件时,我们常常会遇到一个问题:文件内容虽然齐全,但少了页眉页脚,显得不够专业。尤其是在生成报告、论文或合同等正式文档时,如果页面上都没有标题、页码或公司名称,不仅阅读不便,还容易造成混淆。…

Python---批量给视频添加片头片尾

在剪辑视频的时候,如果视频很少的情况可以考虑自己使用软件来拼接一下,但是如果要给几百个视频加片头片尾,那就需要使用软件来加了。 基础代码示例:from moviepy.editor import VideoFileClip, concatenate_videoc…

上海AI优化:AI优化公司技术革新与行业标杆解析

上海AI优化企业新势力:解码智能流量时代的制胜密码 AI优化企业技术革新与行业标杆解析 AI优化企业如何重构搜索生态竞争格局 一、AI优化企业排行榜:技术驱动下的头部阵营 在AI重构搜索生态的2025年,上海及周边地区的…

2025 年隔离变压器厂家最新推荐榜:结合中国电力设备行业协会测评权威数据,精选实力企业深度解析船用/三相伺/医疗专用隔离变压器公司推荐

引言 在工业生产、新能源、医疗设备等领域,隔离变压器对保障电力系统稳定、规避电气干扰至关重要,市场需求逐年攀升。但行业内厂家良莠不齐,产品质量与定制能力差异显著。据中国电力设备行业协会 2025 年最新测评数…

ContextCapture无人机影像与激光点云融合建模感受

1.一直对空地融合和无人机与激光点云融合抱有很大的期待,限于没有很好的激光点云设备,一直没有实验看看结果如何。 最近入手了一台RS10,终于有高精度带地理坐标的激光点云数据了,然后就实验了一下。 2.首先遇到的一…

MongoDB 与其他数据库(如 Redis、Elasticsearch、PostgreSQL)对比

-----------------------------------------------------------------------------------------看起来你想了解 MongoDB 和其他数据库的对比,但未明确具体对比对象。我先帮你梳理 MongoDB 的核心特性,并默认对比最常…

一行命令让你修改博客上的粉丝数

在日常浏览网页时,你是否曾想过直接修改页面上的文字、调整排版,甚至临时编辑内容用于演示或截图?其实无需复杂的开发工具,只需一行简单的 JavaScript 命令,就能让任意网页瞬间变成可编辑状态 —— 这就是documen…

数据库分类详解

数据库主要分为关系型、时序型、NoSQL型三大类。关系型数据库(如MySQL)采用二维表结构,支持SQL和ACID事务,适合业务系统核心数据。时序数据库(如InfluxDB)专为时间序列数据优化,适用于监控和IoT场景。NoSQL数据…

2025年护栏厂家权威推荐榜单:不锈钢栏杆/桥梁防撞护栏/河道景观护栏,专业设计与安全防护全解析

2025年护栏厂家权威推荐榜单:不锈钢栏杆/桥梁防撞护栏/河道景观护栏,专业设计与安全防护全解析 护栏作为基础设施和建筑工程中不可或缺的安全防护设施,在城市化进程和基础设施建设中发挥着日益重要的作用。随着现代…

2025年发电机厂家推荐排行榜,发电机组出租,柴油发电机出租,甲醇发电机组租赁,移动式发电机出租,发电机组维修保养,专业可靠之选

2025年发电机厂家推荐排行榜:发电机组出租、柴油发电机出租、甲醇发电机组租赁、移动式发电机出租、发电机组维修保养专业可靠之选 行业背景与发展趋势 随着我国基础设施建设的持续推进和能源结构的优化调整,发电设备…

执行计划解释

执行计划解释 MySQL执行计划中的type和extra列是分析查询性能的关键指标: type列解析type列表示MySQL访问表数据的方式,按效率从高到低排序如下:‌system‌:表仅一行数据(系统表特例) ‌const‌:通过主键或唯一…

MATLAB中的Excel文件操作:从入门到精通 - 指南

MATLAB中的Excel文件操作:从入门到精通 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

2025 年保护罩生产厂家最新推荐榜:技术与服务双重测评,精选优质品牌权威指南PVC 法兰保护罩/不锈钢法兰保护罩/设备保护罩公司推荐

工业保护罩作为设备安全防护的核心部件,其性能直接关系到化工、石油等行业的生产安全与运营成本。为破解企业选型难题,本次榜单联合中国工业防护装备协会开展专项测评,基于 GB/T 标准及 ASTM 规范,对 126 家企业进…

Flannel 为 Kubernetes 集群中的容器提供了多种网络通信模式

Flannel 为 Kubernetes 集群中的容器主要提供了三种网络通信模式:VXLAN、host-gw 以及 UDP 。它们在工作原理和性能上有所不同,你可以根据实际的网络环境和需求进行选择。 下面这个表格整理了这三种核心模式的关键信…

linux 查看防火墙放开的端口

目录1. 使用 firewalld(推荐用于 CentOS/RHEL/Fedora)2. 使用 ufw(Ubuntu 系统常见)3. 使用 iptables(传统工具,或底层驱动)4. 使用 netstat 或 ss 查看正在监听的端口(系统级)总结在 Linux 系统中,查看防火…

在nginx中通过多级代理支持grpc协议

本文分享自天翼云开发者社区《在nginx中通过多级代理支持grpc协议》.作者:尹****聪 gRPC 是由 Google 开源的一个 RPC 框架,旨在统一服务间通信的方式。该框架基于 HTTP/2 协议传输,使用 Protocol Buffers 作为接口…

Python---批量去视频的片头和片尾

在需要对视频进行批量处理的时候,常见的就是批量去视频的片头和片尾: 具体代码示例:import os import re import time import subprocess from decimal import Decimal from multiprocessing import Poolpath = rE:…

Linux下的拼音输入法 (1)

我用的是Debian 12 KDE. 国内互联网厂的拼音输入法装了都不能用:可以理解,这哪有做游戏等挣钱啊。 用了半年的sunpinyin,会用程序往用户词典里加词 (在系列2里贴代码)。 今天折腾了一通输入法,把KDE搞坏了,Ctrl…

Docker镜像与容器:轻松理解与实战 - 实践

Docker镜像与容器:轻松理解与实战 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

从数据孤岛到智能洞察:构建面向未来的 Operation intelligence 体系

在数字世界持续运转的过程中,系统每时每刻都在产生海量的数据。我们把这些数据统称为 Operation Data(运营数据)。它不仅记录着系统的运行状态,更蕴藏着驱动业务增长、保障系统稳定、防范安全风险的关键线索。更重…