model是关于你的数据的单一的,确定的信息来源。 它包含您正在存储的数据的基本字段和行为。Django通过抽象化的模型层(models)为你的网络应用提供对于数据的结构化处理和操作处理,数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,使用数据库API对数据库进行增删改查的操作。
使用哪种数据库,只需要在settings.py中配置即可,如:
<1> sqlite: django默认使用sqlite的数据库,默认自带sqlite的数据库驱动 , 引擎名称:django.db.backends.sqlite3
<2> mysql:引擎名称:django.db.backends.mysql
<3>如果想更改数据库:
1 DATABASES = {
2 'default': {
3 'ENGINE': 'django.db.backends.mysql',
4 'NAME': 'books', #你的数据库名称
5 'USER': 'root', #你的数据库用户名
6 'PASSWORD': '', #你的数据库密码
7 'HOST': '', #你的数据库主机,留空默认为localhost
8 'PORT': '3306', #你的数据库端口
9 }
10
11 }
注意事项:
1 NAME即数据库的名字,在mysql连接前该数据库必须已经创建,而上面的sqlite数据库下的db.sqlite3则是项目自动创建
2 USER和PASSWORD分别是数据库的用户名和密码。
3 设置完后,再启动我们的Django项目前,我们需要激活我们的mysql。
4 然后,启动项目,会报错:no module named MySQLdb
5 这是因为django默认你导入的驱动是MySQLdb,可是MySQLdb对于py3有很大问题,所以我们需要的驱动是PyMySQL
6
7 所以,我们只需要找到项目名文件下的__init__,在里面写入:
8 import pymysql
9 pymysql.install_as_MySQLdb()
Model 字段
1 AutoField 根据实际ID自动增长的IntegerField . 你通常不需要直接使用;
2 如果不指定,一个主键字段将自动添加到你创建的
3 BigIntegerField 一个64位整数, 类似于一个 IntegerField 这个字段默认的表单组件是一个TextInput.
4
5 IntegerField([**options])
6 一个整数。在Django所支持的所有数据库中,从 -2147483648 到 2147483647 范围内的值是合法的。默认的表单输入工具是TextInput.
7
8 BinaryField 用来存储原始二进制码的Field. 只支持bytes 赋值,注意这个Field只有很有限的功能。
9 例如,不大可能在一个BinaryField 值的数据上进行查询
10 BooleanField true/false 字段。默认表单挂件是一个CheckboxInput.
11 如果你需要设置null 值,则使用NullBooleanField 来代替BooleanField。
12 如果Field.default没有指定的话, BooleanField 的默认值是 None。
13 CharField 一个用来存储从小到很大各种长度的字符串的地方。
14 如果是巨大的文本类型, 可以用 TextField.
15 这个字段默认的表单样式是 TextInput.
16 CharField必须接收一个额外的参数:
17 CharField.max_length¶:字段的最大字符长度.max_length将在数据库层和Django表单验证中起作用, 用来限定字段的长度.
18 DateField 这是一个使用Python的datetime.date实例表示的日期. 有几个额外的设置参数:
19
20 DateField.auto_now¶ 每次保存对象时,自动设置该字段为当前时间。
21 用于"最后一次修改"的时间戳。注意,它总是使用当前日期;它不只是一个默认值,你可以覆盖。
22
23 DateField.auto_now_add¶ 当对象第一次被创建时自动设置当前时间。用于创建时间的时间戳.
24 它总是使用当前日期;和你可以覆盖的那种默认值不一样。
25
26 该字段默认对应的表单控件是一个TextInput. 在管理员站点添加了一个JavaScript写的日历控件,
27 和一个“Today"的快捷按钮.包含了一个额外的invalid_date错误消息键.
28
29
30 DateTimeField(DateField) - 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]
31
32 DateField(DateTimeCheckMixin, Field) - 日期格式 YYYY-MM-DD
33
34 TimeField(DateTimeCheckMixin, Field) - 时间格式 HH:MM[:ss[.uuuuuu]]
35
36 DurationField(Field)用作存储一段时间的字段类型 - 类似Python中的timedelta.
37 - 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型
38
39 DecimalField(max_digits=None, decimal_places=None[, **options]) 表示十进制浮点数
40
41 EmailField([max_length=254, **options])一个 CharField 用来检查输入的email地址是否合法。它使用 EmailValidator 来验证输入合法性。
42
43 FileField([upload_to=None, max_length=100)一个上传文件的字段。
44 FileField字段不支持primary_key 和unique参数,如果使用会生成 TypeError错误
45
46 FilePathField(path=None[, match=None, recursive=False, max_length=100])
47 一个 CharField ,内容只限于文件系统内特定目录下的文件名。有三个参数, 其中第一个是 必需的:
48
49 FloatField([**options])用Python的一个float 实例来表示一个浮点数.
50
51
52 ImageField([upload_to=None, height_field=None, width_field=None, max_length=100, **options])¶
53 继承了 FileField的所有属性和方法, 但还对上传的对象进行校验,确保它是个有效的image.
54
55 TextField([**options])大文本字段。该模型默认的表单组件是Textarea。
56
57 TimeField([auto_now=False, auto_now_add=False, **options])¶
58 时间字段,和Python中 datetime.time 一样。接受与DateField相同的自动填充选项。
59 表单默认为 TextInput.输入框。
60
61 URLField([max_length=200, **options])一个CharField 类型的URL此字段的默认表单widget为TextInput。
62
63 UUIDField([**options])一个用来存储UUID的字段。使用Python的UUID类。
64 当使用PostgreSQL数据库时,该字段类型对应的数据库中的数据类型是uuid
字段选项(Field options)——参数
1 Field.null 如果为True,Django将在数据库中将空值存储为NULL。默认值是 False。 2 3 Field.blank 如果为True,则该字段允许为空白。 默认值是 False。 4 5 Field.choices 它是一个可迭代的结构(比如,列表或是元组), 6 由可迭代的二元组组成(比如[(A, B), (A, B) ...]),用来给这个字段提供选择项。 7 如果设置了 choices ,默认表格样式就会显示选择框,而不是标准的文本框,而且这个选择框的选项就是 choices 中的元组。 8 9 Field.db_column 数据库中用来表示该字段的名称。如果未指定,那么Django将会使用Field名作为字段名. 10 11 Field.db_index 若值为 True, 则 django-admin sqlindexes 将会为此字段输出 CREATE INDEX 语句。 12 13 14 Field.error_messages 能够让你重写默认抛出的错误信息。通过指定 key 来确认你要重写的错误信息。 15 16 Field.primary_key若为 True, 则该字段会成为模型的主键字段。 17 如果你没有在模型的任何字段上指定 primary_key=True, Django会自动添加一个 AutoField 字段来充当主键。 18 19 Field.unique 如果为 True, 这个字段在表中必须有唯一值. 20 21 Field.unique_for_month 类似unique_for_date,只是要求字段对于月份是唯一的。 22 23 验证器 24 Field.validators 该字段将要运行的一个Validator 的列表。