Django源码学习-2-Settings.py配置文件-下
Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
到目前为止,当程序涉及到数据库相关操作时,一般都会这么操作: (1)创建数据库,设计表结构和字段; (2)使用MySQLdb来连接数据库,并编写数据访问层代码;
(3)业务逻辑层去调用数据访问层,执行数据库操作。
已经创建的Django工程中创建app时(假设app的名称为 index ),那么在 index 模块下默认会生成 models.py 文件,这个就是 Django 工程中操作数据库的文件。
from django.db import models
Django 是通过 Model 类来操作数据库的,程序员不需要关注SQL语句和数据库的类型(无论数据库是MySql、Sqlite,还是其它类型),Django 自动生成相应数据库类型的SQL语句,来完成对数据库数据的操作。
进入 models 源码中,可以发现平时使用的 API,都封装在了里面,一对一、一对多、多对多的关系。
ORM模型
# 类 -> 数据库表
# 对象 -> 表中的每一行数据
# 对象.id,对象.value -> 每行中的数据
#这个类是用来生成数据库表的,这个类必须继承models.Model类
字段类型
一般数据库中字段类型大概5种(字符串/数字/浮点型/时间类型/布尔类型),但 Django为了在后台 admin 中可以操作数据库,同时为了限制在 admin 中对数据库的无效操作,Model 中设置了很多种数据类型。
1、models.AutoField 自增列=int(11)
如果没有的话,默认会生成一个名称为id的列,如果要显示的定义一个自增列,必须把该列设置为主键(primary_key=True)
字符串类型字段 必须加max_length参数
2、models.CharField
布尔类型字段=tinyint(1) 不能为空,Blank=True
3、models.BooleanField
用逗号分割的数字类型=varchar 继承CharField,所以必须加max_lenght参数
4、models.ComaSeparatedIntegerField
参数auto_now=True表示每次更新都会更新这个时间;参数auto_now_add表示只是第一次创建时添加,之后的更新不再改变
5、models.DateField 日期字段类型date
日期字段类型datetime 同DateField的参数
6、models.DateTimeField
十进制小数类型=decimal
7、models.Decimal
必须指定整数位max_digits和小数位decimal_places
字符串类型(正则表达式邮箱)=varchar 对字符串进行正则表达式验证
8、models.EmailField
9、models.FloatField 浮点类型=double
10、models.IntegerField 整形
11、models.BigIntegerField 长整形
integer_field_ranges = {
'SmallIntegerField': (-32768, 32767),
'IntegerField': (-2147483648, 2147483647),
'BigIntegerField': (-9223372036854775808, 9223372036854775807),
'PositiveSmallIntegerField': (0, 32767),
'PositiveIntegerField': (0, 2147483647),
}
12、models.IPAddressField 字符串类型(ip4正则表达式)
13、models.GenericIPAddressField 字符串类型(ip4和ip6是可选的)
参数protocol可以是:both、ipv4、ipv6 验证时,会根据设置进行报错
14、models.NullBooleanField 允许为空的布尔类型
15、models.PositiveIntegerFiel 正Integer
16、models.PositiveSmallIntegerField 正smallInteger
17、models.SlugField 减号、下划线、字母、数字
18、models.SmallIntegerField 数字
数据库中的字段有:tinyint、smallint、int、bigint
19、models.TextField 字符串=longtext
20、models.TimeField 时间 HH:MM[:ss[.uuuuuu]]
21、models.URLField 字符串类型,地址正则表达式
22、models.BinaryField 二进制
23、models.ImageField 图片
24、models.FilePathField 文件