学习资料
《Django Web应用开发实战》
1. 模型与数据库
Django对各种数据库提供了很好的支持,包括PostgreSQL、Mysql、SQLite和Orcle,并且为这些数据库提供了统一的API方法,这些API统称为ORM框架,通过内置的DjangoORM框架可以实现数据库连接和读写操作。
2. 模型定义与数据迁移
2.1 定义模型
ORM框架是一种程序技术,用于实现面向对象编程语言中不同类型系统的数据之间的转换,它相当于创建了一个虚拟对象数据库,我们可以通过虚拟对想库的操作直接实现对目标数据库的操作,在Django中统称为模型。
在index/models.py定义模型
class PersonInfo(models.Model):
"""个人信息表"""
# AutoField 自增, primary_key=True 定义为主键
id = models.AutoField(primary_key=True)
# CharField 字符类型, max_length 长度
name = models.CharField(max_length=20)
# IntegerField 数字类型
age = models.IntegerField()
# DateField 日期类型
hireDate = models.DateField()
def __str__(self):
return self.name
class Meta:
verbose_name = '人员信息'
django Model中常用类型字段
类型 | 描述 |
---|---|
AutoField | 自增长类型,字段类型为整数,长度为11 |
CharField | 字符类型 |
BooleanField | 布尔类型 |
DateField | 日期类型 |
DateTimeField | 日期时间(Datetime)类型 |
Decimal | 十进制小数类型 |
EmailField | 字符类型,存储邮箱格式的字符串 |
FloatField | 浮点数类型 |
IntegerField | 整数类型 |
SlugField | 字符类型,包含字母,数字,下划线和连字符 |
TextField | 长文本类型 |
URLField | 字符类型,存储路由格式的字符串 |
BinaryField | 二进制数据类型 |
FileField | 字符类型,存储文件路径的字符串 |
ImageField | 字符类型,存储图片路径的字符串 |
每个模型字段的参数
参数 | 描述 |
---|---|
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格式 |
choice | 默认为空列表,设置字段的可选值 |
help_text | 默认为空字符串,设置表单的提示信息 |
db_column | 默认为None,设置数据表的列名称,默认将字段名作为表列名 |
db_tablespace | 默认为None, |
auto_created | 默认为False,为True自动创建字段用于1对1模型中 |
validators | 默认为空列表,设置字段内容的验证函数 |
error_message | 默认为None,设置错误提示 |
重写__str__
在定义模型时,一般会重写
__str_
函数,这是设置模型的返回值,默认情况下返回值为模型名+主键,该函数可用于外键查询,比如模型A设有外键F,外键字段F与模型B有关联,当查询模型A时,外键字段F会将模型B的函数__str__
返回值作为字段内容注意:该函数只支持返回str类型,其他类型需要使用str()转换成字符类型
模型中Meta的属性
属性 | 描述 |
---|---|
abstract | 设置为True,抽象模型,不会在数据库中建表 |
app_label | 属性值为字符串,将模型设置为指定项目应用 |
db_table | 设置数据库表名,字符串类型 |
ordering | 属性值为列表。将模型以某个字段排序 |
permissions | 属性值元组,设置模型的访问权限 |
indexs | 属性值为列表,定义数据表的索引列表 |
verbose_name | 属性值字符串,设置模型直观可读的名称并以复数的形式展示 |
verbose_name_plural | 属性值字符串,设置模型直观可读的名称并以单数的形式展示 |
label | 只读属性 |
2.2 数据迁移
# 第一步 生成迁移文件
python manage.py makemigrations
# 第二步 向数据库中写入表
python manage.py migrate
在项目开发过程中如果修改了模型内容,可直接按上述步骤执行命令重新生成数据
数据导入、导出
-
导出:
# 将项目数据表中的数据导出到data.json文件 python manage.py dumpdata>data.json
-
导入:
# 将数据导入到项目数据表中 python manage.py loaddata data.json