django框架模型层功能、组成与用法分析

Django框架模型层功能、组成与用法分析

1. 模型层的作用

Django框架采用了MVC模式,其中模型层是其核心部分。它的作用是连接数据库、处理数据和提供数据的接口。模型层相当于应用程序和数据库管理系统之间的中间层,它负责与数据库进行交互,提供了支持存储和检索数据的常用方法,例如添加、删除、修改和查询数据记录等。

2. 模型层的组成

模型层由模型类管理器查询集三个部分组成。

2.1 模型类

模型类是指定义数据模型的Python类,它是Django模型层的核心概念。模型类通过继承django.db.models.Model类来定义数据库表的结构和字段,从而把数据存储到数据库中。

from django.db import models

class Student(models.Model):
    name = models.CharField(max_length=50)
    age = models.IntegerField()

上面的代码定义了一个名为Student的模型类,它有nameage两个字段,分别为CharFieldIntegerField类型。这个模型类在数据库中对应的表名为appname_student,其中appname为应用程序的名称,由Django自动根据模型类的名称生成。

2.2 管理器

管理器是模型类的一个属性,它提供了模型类与数据库交互的接口。如果没有指定一个管理器,Django将自动为模型类创建一个名为objects的管理器。

class Student(models.Model):
    name = models.CharField(max_length=50)
    age = models.IntegerField()

    # 自定义管理器
    objects = models.Manager()

在上面的代码中,我们将默认的objects管理器重命名为StudentManager

class StudentManager(models.Manager):
    def get_students(self, **kwargs):
        return self.filter(**kwargs)

class Student(models.Model):
    name = models.CharField(max_length=50)
    age = models.IntegerField()

    objects = StudentManager()

2.3 查询集

查询集是管理器返回的对象,它包含了符合特定查询条件的模型对象集合。查询集也支持链式调用,可以对查询条件、排序、范围、聚合等操作进行组合。

students = Student.objects.filter(age__gte=18).exclude(name__startswith='A').order_by('-age')

上面的代码中,我们使用filter()方法过滤出年龄大于等于18岁,且姓名不以字母“A”开头的所有学生。然后使用exclude()方法排除这些学生中的姓名以字母“A”开头的。最后使用order_by()方法对学生按照年龄倒序排序。

3. Django模型层的用法分析

3.1 创建模型

创建模型需要按照以下步骤进行:

  • models.py文件中定义模型类,继承django.db.models.Model类;
  • 在模型类中定义字段。
# models.py
from django.db import models

class Student(models.Model):
    name = models.CharField(max_length=50)
    age = models.IntegerField()

3.2 构建数据库表结构

使用以下命令进行数据库迁移。

python manage.py makemigrations # 生成迁移文件
python manage.py migrate # 执行迁移操作

3.3 数据库操作

3.3.1 插入数据

# 创建模型对象,并保存到数据库中
student = Student(name="Tom", age=20)
student.save()

# 批量创建多个模型对象
students = [
    Student(name="Tom", age=20),
    Student(name="Jack", age=21),
]
Student.objects.bulk_create(students)

3.3.2 查询数据

# 查询所有学生对象
students = Student.objects.all()

# 查询学生姓名为"Tom"的学生对象
student = Student.objects.filter(name="Tom").first()

# 查询年龄小于等于20的学生对象
students = Student.objects.filter(age__lte=20)

# 查询年龄大于等于18岁,且姓名不以字母“A”开头的学生对象
students = Student.objects.filter(age__gte=18).exclude(name__startswith='A')

# 对查询结果进行排序,按照年龄从小到大排序
students = Student.objects.order_by('age')

# 对查询结果进行反向排序,按照年龄从大到小排序
students = Student.objects.order_by('-age')

# 统计学生对象个数
count = Student.objects.count()

3.3.3 更新数据

# 修改某个学生对象的姓名和年龄
student = Student.objects.get(id=1)
student.name = "Tommy"
student.age = 21
student.save()

# 批量修改学生对象的年龄为20
Student.objects.filter(name="Tom").update(age=20)

3.3.4 删除数据

# 删除某个学生对象
student = Student.objects.get(id=1)
student.delete()

# 删除所有学生对象
Student.objects.all().delete()

4. 示例说明

4.1 一个简单的博客系统

下面是一个简单的博客系统,它包含了博客、分类和标签三个模型。每个博客可以属于一个分类,也可以有多个标签。

# models.py
from django.db import models

class Category(models.Model):
    name = models.CharField(max_length=50)

class Tag(models.Model):
    name = models.CharField(max_length=50)

class Blog(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_time = models.DateTimeField(auto_now_add=True)
    modified_time = models.DateTimeField(auto_now=True)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    tags = models.ManyToManyField(Tag)

上面的代码中,我们定义了CategoryTagBlog三个模型类。其中,Blog模型使用了ForeignKeyManyToManyField这两个字段类型。

ForeignKey字段用来定义外键,它表示一个模型实例与另一个模型实例之间的关系。在Blog模型中,我们定义了category字段,它与Category模型中的一个实例关联。

ManyToManyField字段用来定义多对多关系,它表示一个模型实例可以有多个与之相关的另一个模型实例。在Blog模型中,我们定义了tags字段,它与Tag模型中的多个实例关联。

4.2 一个简单的投票系统

下面是一个简单的投票系统,它包含了投票、选项和结果三个模型。每个投票可以有多个选项,每个选项又可以属于多个投票,结果统计了每个选项的投票数量和占比。

# models.py
from django.db import models

class Vote(models.Model):
    name = models.CharField(max_length=50)
    start_time = models.DateTimeField()
    end_time = models.DateTimeField()
    create_time = models.DateTimeField(auto_now_add=True)

class Option(models.Model):
    name = models.CharField(max_length=50)
    vote = models.ManyToManyField(Vote)

class Result(models.Model):
    option = models.ForeignKey(Option, on_delete=models.CASCADE)
    num = models.IntegerField()
    ratio = models.FloatField()

上面的代码中,我们定义了VoteOptionResult三个模型类。其中,VoteOption之间是多对多关系,中间需要一个辅助模型来存储该关系;Result模型与Option模型之间是一对多关系。

模型的使用方法基本相同,只需按照模型的定义使用增、删、改、查等操作即可。例如,查询所有Vote模型的实例:

votes = Vote.objects.all()

5. 总结

Django模型层是Django框架的核心部分之一,它负责连接数据库、处理数据和提供数据的接口。模型层由模型类、管理器和查询集三个部分组成,它们共同构建了整个数据模型的框架。模型层的使用方法并不难,只需要按照模型的定义使用增、删、改、查等操作即可。在实际应用中,我们需要充分利用Django模型层的功能和组成,选择合适的方法操作数据库,以提高开发效率和代码可维护性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django框架模型层功能、组成与用法分析 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • 简单的Django实现图片上传,并存储进MySQL数据库 案例——小白

    目标:通过网页上传一张图片到Django后台,后台接收并存储进数据库 真是不容易!!这个案例的代码网上太乱,不适合我,自己摸索着写,终于成功了,记录一下,仅供自己参考,有的解释可能不对,自己明白就好,哈哈哈!~!~!   1.首先用pycharm创建一个Django项目,嗯,对,这是第一步~     2. 第二步呢,改一下setting.py的设置吧,数据库…

    2023年4月9日
    00
  • Python – Django – 删除作者

    修改 author_list.html,添加删除按钮 <!DOCTYPE html> <html lang=”en”> <head> <meta charset=”UTF-8″> <title>作者列表</title> </head> <body> <h1&…

    Django 2023年4月10日
    00
  • 将Python的Django框架与认证系统整合的方法

    将Python的Django框架与认证系统整合的方法是很常见的需求,主要是在网站建设等场景中需要用户注册、登录、注销等功能。下面是将Python的Django框架与认证系统整合的完整攻略。 1.创建Django项目并设置认证系统 首先,我们需要创建一个Django项目,并设置认证系统。可以在终端中执行以下命令来创建Django项目: django-admin…

    Django 2023年5月16日
    00
  • django 认证类配置实现

    下面是关于 Django 认证类配置实现的完整攻略,包含两条示例说明。 什么是 Django 认证类? Django 认证类是 Django 框架提供的一种认证机制,可以用于对用户进行认证。它可以让开发者快速的添加用户身份验证和授权功能,让开发者专注于业务开发。 认证类配置实现 接下来,我们将介绍如何在 Django 中使用认证类进行身份验证的配置实现。共有…

    Django 2023年5月16日
    00
  • Django+Vue打造购物网站(四)

    首页商品类别数据显示 商品分类接口 大概需要两个,一个显示三个类别 一个显示类别及类别下的全部商品 现在开始写商品的接口首先编写三个分类的serializer class CategorySerializer3(serializers.ModelSerializer): ”’ 三级分类 ”’ class Meta: model = GoodsCatego…

    2023年4月9日
    00
  • Python笔记(五)–Django中使用模板

      使用Django开发网站时,如果不使用模板,那么将会很不合理。因为我们所有的html代码都需要被硬编码到我们的Python代码中。我们新建一个工程,然后再在新建一个应用程序,并在其中的views.py文件中添加如下代码: 1 #coding=UTF-8 2 from django.http.response import HttpResponse, Ht…

    Django 2023年4月12日
    00
  • 详解Django Form表单Field属性与方法

    Django Form是Web开发中用于处理用户输入数据的强大工具,它可以轻松地生成表单页面并验证用户输入。在Django Form中,每个表单字段都是一个Field实例,它具有许多属性和方法。 本文将详细介绍Django Form Field的所有属性和方法,并提供一些实用的代码示例。 Field类的常用属性 在Django Form中,每个表单字段都是一…

    Django 2023年3月13日
    00
  • Django缓存优化之redis

         Redis 概述   Redis 是一个开源的Inmemory key-value 存储系统,性能高,很大程度上补偿了 memcached 的不足。支持多种存储类型,包括 string, list, set, zset(sorted set — 有序集合)和 hash。   Redis 优点   1)异常快速:Redis的速度非常快,每秒能执行约…

    Django 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部