了解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驱动
# 方式 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 modelsclass 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模版语法遍历展示图书数据:
<!-- 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绑定,让用户能够访问到图书列表页:
# myapp/urls.py
from django.urls import path
from . import viewsurlpatterns = [# 路径:/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, includeurlpatterns = [path('admin/', admin.site.urls),path('', include('myapp.urls')), # 包含 myapp 的路由
]
(6)启动项目进行测试
在终端执行命令 python manage.py runserver 启动项目,访问 http://127.0.0.1:8000/books/,就能看到图书列表啦!