杭州电子商务研究院

Django 模型简介

2020-10-21 08:00飞浪

介绍

Django 是一个基于 Python 的 Web 开发框架。它使用模型-视图-控制器 (MVC) 架构,提供一定程度的抽象和最佳实践以简化开发。

本指南将探讨 MVC 架构的“模型”部分。模型是 SQL 意义上的表的抽象。模型是定义数据形状的 MVC 组件。在 Django 中,模型是使用 Python 类定义的。

本指南假设您至少具备中级 Python 技能,并且至少具备初级 Django 技能。Django 入门指南可在此处找到。

Django 模型

每个 Django 模型都映射到单个数据库表,模型的每个属性都映射到数据库字段。默认情况下,模型是 Django 的django.db.models.Model的子类。

由于它们是 Django 应用程序内数据的信息来源,因此 Django 提供了一种方法来访问存储的信息以进行 CRUD(创建、检索、更新、删除)操作。此方法称为查询。

示例模型

为了更好地理解模型,下面是具有四个字段的School模型的代码片段:

  • 姓名
  • 总人口数
  • 成立日期
  • 是私有的
      from django.db import models

class School(models.Model):
    name = models.CharField(max_length=20)
    total_population = models.IntegerField(default=200)
    date_of_establishment = models.DateField()
    is_private = models.BooleanField(default=False)
    

在上面的示例中,School模型映射到数据库中的 School 表。模型属性映射到具有相同定义属性(例如数据类型和默认值)的表列。models.CharField ()函数将生成Varchar或String字段,而models.BooleanField()将在数据库中生成 Boolean 字段。

这些函数提供了数据库操作中急需的抽象,这是 MVC 架构的目标。这使得使用 Django 进行应用程序开发变得更加容易。

作为一个 Python 类,该模型还可以进一步增强函数,以进一步处理从该类创建的对象实例中的数据。

例如,假设您需要检查一所学校的总学生人数和状态。如果该学校是私立学校,则总学生人数不应超过 1,000,如果超过,则应返回一条消息。

      def check_population(self):
    if self.is_private and self.total_population > 1000:
        return "Private school maximum capacity is 1000"
    

数据库

模型是与数据库交互的组件。在 Django 中,数据库在settings.py文件中定义为配置字典。默认情况下,样板代码会生成与简单 SQLite 数据库的连接。下面是示例配置字典。

      DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
    
      DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'myproject',
        'USER': 'myprojectuser',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
    }
}
    

由于配置是字典的字典,这意味着 Django 项目中可以有多个数据库。要了解有关使用多个数据库的更多信息,请查看本指南。

结论

了解 Django MVC 的模型组件可以让您了解架构的复杂性并根据您的独特需求进行定制。

要基于本指南,请进一步了解 Django 模型相关概念,包括:

  1. Django 数据库:如何连接不同的数据库以及如何处理多个数据库。请参阅本指南以供参考。

  2. 抽象模型和继承:设计您自己的父模型,供其他人继承。请参阅本指南。

  3. Django 模型中的多态性:请参阅本指南以深入了解该主题。

曝光28200浏览1502