首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
Django简介与安装
第一个Django项目
Django项目结构解析
模型与数据库设计
Django ORM基础操作
视图与URL配置
模板系统快速入门
表单处理与验证
会话与用户认证
中间件与信号机制
静态文件与媒体管理
Django后台管理
Django通用视图与类视图
数据迁移与模型变更
单元测试与测试驱动开发
错误处理与日志记录
安全性与权限控制
国际化与本地化
Django性能优化
部署与运维
Django源码解析(一):启动流程
Django源码解析(二):请求处理
Django源码解析(三):响应生成
自定义标签与过滤器
高级数据库操作
RESTful API设计与实现
异步任务与消息队列
缓存策略与应用
Django与第三方服务集成
扩展插件开发
数据导入导出与迁移
多数据库支持与数据库路由
高并发与负载均衡
Docker容器化部署
微服务架构与Django
Django与前端框架集成
性能监控与调优
安全性与攻击防范
Django最佳实践
Django生态圈及发展趋势
实战项目一:搭建个人博客系统
实战项目二:开发在线投票系统
实战项目三:构建企业级后台管理系统
实战项目四:实现文件上传与下载功能
实战项目五:开发实时聊天室
实战项目六:构建RESTful API接口
实战项目七:实现用户权限管理系统
实战项目八:开发微信小程序后台
实战项目九:构建电商平台(一):商品管理
实战项目九:构建电商平台(二):购物车与订单
实战项目九:构建电商平台(三):支付与物流
实战项目十:搭建分布式爬虫系统
实战项目十一:实现数据可视化与分析
实战项目十二:开发在线教育平台(一):课程管理
实战项目十二:开发在线教育平台(二):视频点播
实战项目十二:开发在线教育平台(三):直播互动
实战项目十三:构建社交网络(一):用户关系
实战项目十三:构建社交网络(二):信息流与推荐
实战项目十三:构建社交网络(三):朋友圈与评论
实战项目总结与拓展
当前位置:
首页>>
技术小册>>
Django框架入门指南
小册名称:Django框架入门指南
### Django ORM基础操作 在Django框架中,对象关系映射(Object-Relational Mapping, ORM)是一个核心概念,它允许开发者使用Python代码来操作数据库,而无需直接编写SQL语句。Django ORM通过提供一套丰富的API,极大地简化了数据库操作,提高了开发效率,同时也增强了代码的可读性和可维护性。本章将深入介绍Django ORM的基础操作,包括模型定义、查询集(QuerySet)的使用、数据的增删改查(CRUD)等。 #### 一、模型定义 在Django中,每个模型(Model)都映射到数据库中的一个表。模型是Django ORM的基石,通过定义模型类,Django能够自动为你创建数据库表,并允许你通过Python代码来操作这些表。 ##### 1.1 创建模型 首先,你需要在Django应用的`models.py`文件中定义模型。例如,定义一个简单的博客文章模型: ```python from django.db import models class BlogPost(models.Model): title = models.CharField(max_length=200) content = models.TextField() pub_date = models.DateTimeField(auto_now_add=True) author = models.ForeignKey('auth.User', on_delete=models.CASCADE) def __str__(self): return self.title ``` 在这个例子中,`BlogPost`模型有四个字段:`title`(标题,字符型,最大长度200)、`content`(内容,文本型)、`pub_date`(发布日期,自动设置为当前时间)和`author`(作者,外键关联到Django自带的`User`模型)。 ##### 1.2 迁移数据库 定义了模型之后,你需要通过Django的迁移系统来更新数据库。首先,运行`makemigrations`命令来创建迁移文件: ```bash python manage.py makemigrations ``` 然后,运行`migrate`命令来应用这些迁移,从而在数据库中创建或更新表: ```bash python manage.py migrate ``` #### 二、查询集(QuerySet) 在Django ORM中,查询集(QuerySet)代表从数据库中获取的对象集合。它允许你通过链式调用的方式来构建复杂的查询,同时保持代码的简洁和可读性。 ##### 2.1 基本查询 查询集是通过模型的`objects`管理器获得的。例如,获取所有博客文章: ```python posts = BlogPost.objects.all() ``` 你也可以使用`filter()`方法来过滤查询集: ```python # 获取所有由特定用户发布的文章 user_posts = BlogPost.objects.filter(author=request.user) ``` ##### 2.2 链式查询 Django ORM支持链式调用,这意味着你可以将多个查询方法串联起来,以构建更复杂的查询: ```python # 获取所有在2023年发布的,由特定用户撰写的文章 user_posts_2023 = BlogPost.objects.filter(author=request.user, pub_date__year=2023) ``` ##### 2.3 排除查询 使用`exclude()`方法可以排除掉满足特定条件的对象: ```python # 获取除了特定用户之外的所有文章 other_posts = BlogPost.objects.exclude(author=request.user) ``` ##### 2.4 排序与切片 你可以使用`order_by()`方法对查询集进行排序,并通过切片操作来获取子集: ```python # 按发布日期降序排列文章 latest_posts = BlogPost.objects.order_by('-pub_date')[:10] # 获取最新的10篇文章 ``` #### 三、数据的增删改查(CRUD) ##### 3.1 创建(Create) 使用模型的`create()`方法可以一次性创建并保存一个对象: ```python new_post = BlogPost.objects.create(title='Django ORM入门', content='这是一篇关于Django ORM的入门文章。', author=request.user) ``` ##### 3.2 读取(Read) 除了使用`all()`获取所有对象外,还可以使用`get()`方法根据条件获取单个对象。注意,如果查询条件不匹配或匹配多个对象,`get()`会抛出异常: ```python # 获取标题为'Django ORM入门'的文章 post = BlogPost.objects.get(title='Django ORM入门') ``` ##### 3.3 更新(Update) 更新对象通常有两种方式:直接修改对象的属性后调用`save()`方法,或使用`update()`方法批量更新查询集中的对象: ```python # 方法一:直接修改后保存 post.title = 'Django ORM深入探索' post.save() # 方法二:批量更新 BlogPost.objects.filter(author=request.user).update(pub_date=timezone.now()) ``` ##### 3.4 删除(Delete) 删除对象同样有两种方式:使用对象的`delete()`方法删除单个对象,或使用查询集的`delete()`方法删除多个对象: ```python # 删除单个对象 post.delete() # 删除所有由特定用户发布的文章 BlogPost.objects.filter(author=request.user).delete() ``` #### 四、进阶操作 ##### 4.1 聚合与注解 Django ORM提供了聚合(Aggregation)和注解(Annotation)功能,允许你执行更复杂的数据库查询,如计算平均值、最大值、求和等,或向查询集中添加额外的计算字段。 ##### 4.2 F表达式与Q表达式 F表达式允许你在查询中引用模型字段的值,而Q表达式则提供了更复杂的查询条件组合方式,使得构建复杂查询变得更加灵活。 ##### 4.3 跨数据库操作 Django ORM支持多数据库配置,允许你在不同的数据库之间分配模型,并执行跨数据库的查询和事务。 #### 五、总结 Django ORM以其简洁的API和强大的功能,极大地简化了数据库操作,使得开发者能够更专注于业务逻辑的实现。通过本章的学习,你应该已经掌握了Django ORM的基础操作,包括模型定义、查询集的使用以及数据的增删改查。随着你对Django ORM的进一步探索,你将能够利用它提供的更多高级功能,来构建更加复杂和强大的Web应用。
上一篇:
模型与数据库设计
下一篇:
视图与URL配置
该分类下的相关小册推荐:
Django零基础入门
Django快速开发实战