django中内嵌了ORM框架,ORM框架可以将类和数据表进行对应起来,只需要通过类和对象就可以对数据表进行操作。
django中主要是设计类:模型类。
ORM还可以让模型类生成表。
在模型类可以(1)设置模型类。(2)设置模型管理类。
1)设置模型类:
模型类写在应用的models.py中,必须继承models.Model的类。 类中的属性对应数据库中的字段。 例如: class 类名(models.Models):
属性 = models.字段类型(参数)
1
#通过元类可以指定生成的表明,不指定,django会自动生成
class Meta:
db_table=‘指定生成的表明’
2)模型类生成迁移文件:(迁移表可以咋应用的migrations文件中找到)
python manage.py makemigrations
3)迁移文件生成表
python manage.py migrate
二.模型管理类。
django中会帮我们自己生成一个objects模型管理对象。通过这个管理器可以对数据库进行操作。
除此之外我们还可以自己定义一个模型管理类,在模型类中实现这个类。
通过自定义的模型管理类,(1)我们可以重写python中管理类已经有的方法来改变查询的结果集。(2)我们可以根据需求,写自己需要的特定方法。
实现:
class 类名(models.Manger):
定义的方法
(1)这个类要继承models.Manager这个类。
(2)要在对应的模型类里面实现这个类。
三.django中的字段类型。
Django 自带数十种内置的字段类型;
(1)AutoField
通常不需要直接使用。django会帮我们自动生成一个自动增长IntegerField类型的id。
(2)BigIntegerField
一个64位整数。他的范围(-2的63次方)到(-2的63次方-1)
(3)BinaryField
这是一个用来存储原始二进制码的Field. 只支持bytes 赋值。
(4)BooleanField
此字段的默认表单挂件是一个CheckboxInput.
(5)CharField
一个用来存储从小到很大各种长度的字符串的地方。
CharField必须接收一个额外的参数:
CharField.max_length¶
字段的最大字符长度.max_length将在数据库层和Django表单验证中起作用, 用来限定字段的长度.
(6)CommaSeparatedIntegerField
一个逗号分隔的整数字段。像 CharField一样, 需要一个max_length 参数, 同时数据库移植时也需要注意.
(7)DateField
这是一个使用Python的datetime.date实例表示的日期.
DateField.auto_now
每次保存对象时,自动设置该字段为当前时间。用于"最后一次修改"的时间戳。注意,它总是使用当前日期;它不只是一个默认值,你可以覆盖。
DateField.auto_now_add
当对象第一次被创建时自动设置当前时间。用于创建时间的时间戳. 它总是使用当前日期;和你可以覆盖的那种默认值不一样。
(8)DateTimeField
它是通过Python datetime.datetime实例表示的日期和时间. 携带了跟DateField一样的额外参数.
(9)DecimalField
用python中 Decimal 的一个实例来表示十进制浮点数. 有两个 必须的参数:
DecimalField.max_digits
位数总数,包括小数点后的位数。该值必须大于等于decimal_places.
DecimalField.decimal_places
小数点后的数字数量
(10)DurationField
用作存储一段时间的字段类型 - 类似Python中的timedelta. 当数据库使用的是PostgreSQL, 该数据类型使用的是一个 interval 而在Oracle上,则使用的是 INTERVAL DAY(9) TO SECOND(6). 否则使用微秒的bigint。
(11)EmailField
一个 CharField 用来检查输入的email地址是否合法。它使用 EmailValidator 来验证输入合法性。
(12)FileField
一个上传文件的字段。
注意
FileField字段不支持primary_key 和unique参数,如果使用会生成 TypeError错误
(13)FilePathField
一个 CharField ,内容只限于文件系统内特定目录下的文件名。有三个参数, 其中FilePathField.path是 必需的.
FilePathField.match
可选的.FilePathField 将会作为一个正则表达式来匹配文件名。但请注意正则表达式将将被作用于基本文件名,而不是完整路径。例如: “foo.*.txt$”, 将会匹配到一个名叫 foo23.txt 的文件,但不匹配到 bar.txt 或者 foo23.png.
FilePathField.recursive
可选的.True 或 False.默认是False.声明是否包含所有子目录的路径
FilePathField.allow_files
可选的.True 或 False.默认是True.声明是否包含指定位置的文件。该参数或allow_folders 中必须有一个为 True.
FilePathField.allow_folders
是可选的.输入 True 或者 False.默认值为 False.声明是否包含指定位置的文件夹。该参数或 allow_files 中必须有一个为 True.
(14)FloatField
用Python的一个float 实例来表示一个浮点数.
(15)ImageField
继承了 FileField的所有属性和方法, 但还对上传的对象进行校验,确保它是个有效的image.
(16)IntegerField
一个整数。在Django所支持的所有数据库中,从 -2147483648 到 2147483647 范围内的值是合法的
(17)GenericIPAddressField
一个 IPv4 或 IPv6 地址, 字符串格式 (例如 192.0.2.30 或 2a02:42fe::4).
(18)NullBooleanField
类似BooleanField, 但是允许 NULL 作为一个选项.使用此代替null=True的BooleanField。
(19)PositiveIntegerField
类似 IntegerField, 但值必须是正数或者零(0). 从0到2147483647的值在Django支持的所有数据库中都是安全的
(20)PositiveSmallIntegerField
该模型字段类似 PositiveIntegerField, 但是只允许小于某一特定值(依据数据库类型而定)。从0 到 32767 这个区间,对于Django所支持的所有数据库而言都是安全的。
(21)SlugField
Slug 是一个新闻术语(通常叫做短标题)。一个slug只能包含字母、数字、下划线或者是连字符,通常用来作为短标签。通常它们是用来放在URL里的。
(22)TextField
大文本字段。该模型默认的表单组件是Textarea
(23)TimeField
时间字段,和Python中 datetime.time 一样。接受与DateField相同的自动填充选项。
(24)URLField
一个CharField 类型的URL