一周学会Django5 Python Web开发-Django5模型定义

锋哥原创的Python Web开发 Django5视频教程:

2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计41条视频,包括:2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~、第2讲 Django5安装、第3讲 Django5创建项目(用命令方式)等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV14Z421z78C/Django5对各种数据库提供了很好的支持,包括PostgreSQL、MySQL、SQLite和 Oracle,而且为这些数据库提供了统一的API方法,这些API统称为ORM框架。通过使用Django5内置的ORM框架可以实现数据库连接和读写操作。

ORM框架是一种程序技术,用于实现面向对象编程语言中不同类型系统的数据之间的转换。 从效果上说,它创建了一个可在编程语言中使用的"虚拟对象数据库",通过对虚拟对象数据库的操作从而实现对目标数据库的操作,虚拟对象数据库与目标数据库是相互对应的。在 Django5中,虚拟对象数据库也称为模型,通过模型实现对目标数据库的读写操作,实现方法如下:

  1. 配置目标数据库,在settings.py中设置配置属性

  2. 构建虚拟对象数据库,在App 的models.py文件中以类的形式定义模型。

  3. 通过模型在目标数据库中创建相应的数据表。

  4. 在其他模块(如视图函数)里使用模型来实现目标数据库的读写操作。

settings.py下我们配置mysql数据库:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_python222',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': 'localhost',
        'PORT': '3308'
    }
}

然后我们在models.py里新建两个模型类,分别是图书模型BookInfo和图书类别模型BookTypeInfo,他们是多对一的关系;

java 复制代码
class BookTypeInfo(models.Model):
    id = models.AutoField(primary_key=True)
    bookTypeName = models.CharField(max_length=20)

    class Meta:
        db_table = "t_bookType"
        verbose_name = "图书类别信息"  # 给模型取个直观的名字


class BookInfo(models.Model):
    id = models.AutoField(primary_key=True)
    bookName = models.CharField(max_length=20)
    price = models.FloatField()
    publishDate = models.DateField()
    bookType = models.ForeignKey(BookTypeInfo, on_delete=models.PROTECT)

    class Meta:
        db_table = "t_book"
        verbose_name = "图书信息"  # 给模型取个直观的名字

模型字段类型如下:

  • AutoField:自增长类型,数据表的字段类型为整数,长度为11位。

  • BigAutoField:自增长类型,数据表的字段类型为bigint,长度为20位。

  • CharField:字符类型。

  • BooleanField:布尔类型。

  • CommaSeparatedIntegerField:用逗号分割的整数类型。DateField:日期( Date)类型。

  • DateTimeField:日期时间( Datetime)类型。Decimal:十进制小数类型。

  • EmailField:字符类型,存储邮箱格式的字符串。

  • FloatField:浮点数类型,数据表的字段类型变成Double类型。IntegerField:整数类型,数据表的字段类型为11位的整数。

  • BigIntegerField:长整数类型。

  • IPAddressField:字符类型,存储Ipv4地址的字符串。

  • GenericIPAddressField:字符类型,存储Ipv4和Ipv6地址的字符串。NullBooleanField:允许为空的布尔类型。

  • PositiveIntegerFiel:正整数的整数类型。

  • PositiveSmallIntegerField:小正整数类型,取值范围为0~32767。SlugField:字符类型,包含字母、数字、下画线和连字符的字符串。

  • SmallIntegerField:小整数类型,取值范围为-32,768~+32,767。

  • TextField:长文本类型。

  • TimeField:时间类型,显示时分秒HH:MM[ :ss[.uuuuuu]]。URLField:字符类型,存储路由格式的字符串。

  • BinaryField:二进制数据类型。

  • FileField:字符类型,存储文件路径的字符串。ImageField:字符类型,存储图片路径的字符串。

  • FilePathField:字符类型,从特定的文件目录选择某个文件。

模型字段参数如下:

  • verbose_name:默认为None,在 Admin站点管理设置字段的显示名称。

  • primary_key:默认为False,若为True,则将字段设置成主键。

  • max_length:默认为None,设置字段的最大长度。

  • unique:默认为False,若为True,则设置字段的唯一属性。

  • blank:默认为False,若为True,则字段允许为空值,数据库将存储空字符串。null:默认为False,若为True,则字段允许为空值,数据库表现为NULL。

  • db_index:默认为False,若为True,则以此字段来创建数据库索引。default:默认为NOT_PROVIDED对象,设置字段的默认值。

  • editable:默认为True,允许字段可编辑,用于设置Admin的新增数据的字段。serialize:默认为True,允许字段序列化,可将数据转化为JSON格式。

  • unique_for_date:默认为None,设置日期字段的唯一性。

  • unique_for_month:默认为None,设置日期字段月份的唯一性。unique_for_year:默认为None,设置日期字段年份的唯一性。choices:默认为空列表,设置字段的可选值。

  • help_text:默认为空字符串,用于设置表单的提示信息。

  • db_column:默认为None,设置数据表的列名称,若不设置,则将字段名作为数据表的列名。

  • db_tablespace:默认为None,如果字段已创建索引,那么数据库的表空间名称将作为该字段的索引名。注意:部分数据库不支持表空间。

  • auto_created:默认为False,若为True,则自动创建字段,用于一对一的关系模型。validators:默认为空列表,设置字段内容的验证函数。

  • error_messages:默认为None,设置错误提示。

ForeignKey方法参数如下:

参数名 参数说明
to 指定关联的目标模型类。可以使用字符串表示模型类的路径,也可以直接使用模型类的引用。
on_delete 指定当关联对象被删除时的行为。CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET0、DO_NOTHING。
related_name 指定反向关联的名称,默认为模型类名_set。
to_field 指定关联的目标模型类中用于关联的字段名称。默认为主键字段。
db_index 如果为True,则在目标模型的关联字段上创建索引。
null 指定关联字段是否可以为空。如果 null=True,则数据库中该字段将允许 NULL值。
blank 指定关联字段是否可以为空。如果blank=True,则表单中该字段可以为空。
limit_choices_to 指定关联对象的过滤条件。可以是一个字典、一个 QuerySet或一个函数。
verbose_name 用于在 Django Admin后台中显示字段名称。
help_text 用于在 Django Admin后台中显示帮助文本。

on_delete的models属性有下面设置选项;

  • CASCADE:这就是默认的选项,级联删除,你无需显性指定它。

  • PROTECT: 保护模式,如果采用该选项,删除的时候,会抛出ProtectedError错误。

  • SET_NULL: 置空模式,删除的时候,外键字段被设置为空,前提就是blank=True, null=True,定义该字段的时候,允许为空。

  • SET_DEFAULT: 置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。

  • SET(): 自定义一个值,该值当然只能是对应的实体了

相关推荐
API快乐传递者1 小时前
淘宝反爬虫机制的主要手段有哪些?
爬虫·python
阡之尘埃3 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
丕羽6 小时前
【Pytorch】基本语法
人工智能·pytorch·python
bryant_meng6 小时前
【python】Distribution
开发语言·python·分布函数·常用分布
m0_594526307 小时前
Python批量合并多个PDF
java·python·pdf
工业互联网专业8 小时前
Python毕业设计选题:基于Hadoop的租房数据分析系统的设计与实现
vue.js·hadoop·python·flask·毕业设计·源码·课程设计
钱钱钱端8 小时前
【压力测试】如何确定系统最大并发用户数?
自动化测试·软件测试·python·职场和发展·压力测试·postman
慕卿扬8 小时前
基于python的机器学习(二)—— 使用Scikit-learn库
笔记·python·学习·机器学习·scikit-learn
Json____8 小时前
python的安装环境Miniconda(Conda 命令管理依赖配置)
开发语言·python·conda·miniconda
小袁在上班8 小时前
Python 单元测试中的 Mocking 与 Stubbing:提高测试效率的关键技术
python·单元测试·log4j