当前位置: 首页 > news >正文

了解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/,就能看到图书列表啦!

http://www.dtcms.com/a/410153.html

相关文章:

  • 【FPGA+DSP系列】——(1)CCS创建工程+LED点亮
  • Windows 作为 Ansible 节点的完整部署流程(含 Docker 部署 Ansible)
  • 今日面试之快问快答:Redis篇
  • 微论-神经网络的亲情密码,权重矩阵的家庭关系论
  • 建个个人网站一年多少钱凡科网网页版登录入口
  • html论坛网站模板小企业网站建设公司
  • 邮件服务器软件哪个好?2025邮件服务器软件推荐
  • langchain-基于agent架构的开发
  • vector深度求索(下)模拟篇
  • 服务器密码错误被锁定如何解决?
  • 远程软件横评:UU远程、ToDesk、向日葵
  • 金仓数据库替代MongoDB:电子证照系统国产化改造实战
  • 关于XLang语言的第三轮答疑
  • 地图网站开发企业网站模板素材
  • Nginx生产环境编译配置升级回退新增模块全解析
  • wordpress 企业站开发wordpress主题配置文件
  • OpenAI携手SAP与微软:推动德国公共部门主权云AI落地
  • NVIDIA Dynamo深度解析:如何优雅地解决LLM推理中的KV缓存瓶颈
  • 三星首款XR头显亮相高通骁龙峰会,微美全息多场景覆盖巩固VR/AR竞争力
  • Redis03-缓存知识点
  • 5网站开发项目经理接到网站开发怎么开展
  • 云原生周刊:K8s 故障排查秘籍
  • D017 vue+django+neo4j音乐知识图谱推荐可视化分析系统|带管理员角色+爬虫
  • 设计模式(C++)详解——迭代器模式(1)
  • 怎么知道网站有没有做301重定向建立网站商城建议
  • 仁寿建设局网站青岛专业网站排名推广
  • Notepad++ 本地提权漏洞|复现|分析
  • HCIP-IoT 真题详解(章节D),嵌入式基础与南向开发 /Part1
  • JavaEE初阶3.0
  • 【网络协议】IoT 设备入网认证机制