前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django源码学习-3-Model-上

Django源码学习-3-Model-上

作者头像
小团子
发布2019-07-30 15:04:59
7890
发布2019-07-30 15:04:59
举报
文章被收录于专栏:数据云团数据云团

Django源码学习-2-Settings.py配置文件-下

Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。

到目前为止,当程序涉及到数据库相关操作时,一般都会这么操作: (1)创建数据库,设计表结构和字段; (2)使用MySQLdb来连接数据库,并编写数据访问层代码;

(3)业务逻辑层去调用数据访问层,执行数据库操作。

已经创建的Django工程中创建app时(假设app的名称为 index ),那么在 index 模块下默认会生成 models.py 文件,这个就是 Django 工程中操作数据库的文件。

代码语言:javascript
复制
from django.db import models

Django 是通过 Model 类来操作数据库的,程序员不需要关注SQL语句和数据库的类型(无论数据库是MySql、Sqlite,还是其它类型),Django 自动生成相应数据库类型的SQL语句,来完成对数据库数据的操作。

进入 models 源码中,可以发现平时使用的 API,都封装在了里面,一对一、一对多、多对多的关系。

ORM模型

代码语言:javascript
复制
# 类 -> 数据库表
# 对象 -> 表中的每一行数据
# 对象.id,对象.value -> 每行中的数据
#这个类是用来生成数据库表的,这个类必须继承models.Model类
代码语言:javascript
复制

字段类型

一般数据库中字段类型大概5种(字符串/数字/浮点型/时间类型/布尔类型),但 Django为了在后台 admin 中可以操作数据库,同时为了限制在 admin 中对数据库的无效操作,Model 中设置了很多种数据类型。

代码语言:javascript
复制
1、models.AutoField  自增列=int(11)
如果没有的话,默认会生成一个名称为id的列,如果要显示的定义一个自增列,必须把该列设置为主键(primary_key=True)
代码语言:javascript
复制
字符串类型字段 必须加max_length参数
2、models.CharField
代码语言:javascript
复制
布尔类型字段=tinyint(1)  不能为空,Blank=True
3、models.BooleanField
代码语言:javascript
复制
用逗号分割的数字类型=varchar 继承CharField,所以必须加max_lenght参数
4、models.ComaSeparatedIntegerField
代码语言:javascript
复制
参数auto_now=True表示每次更新都会更新这个时间;参数auto_now_add表示只是第一次创建时添加,之后的更新不再改变
5、models.DateField  日期字段类型date
代码语言:javascript
复制
日期字段类型datetime  同DateField的参数
6、models.DateTimeField
代码语言:javascript
复制
十进制小数类型=decimal
7、models.Decimal  
  必须指定整数位max_digits和小数位decimal_places
代码语言:javascript
复制
字符串类型(正则表达式邮箱)=varchar  对字符串进行正则表达式验证
8、models.EmailField 
代码语言:javascript
复制
9、models.FloatField  浮点类型=double
代码语言:javascript
复制
10、models.IntegerField  整形
代码语言:javascript
复制
11、models.BigIntegerField 长整形
  integer_field_ranges = {
    'SmallIntegerField': (-32768, 32767),
    'IntegerField': (-2147483648, 2147483647),
    'BigIntegerField': (-9223372036854775808, 9223372036854775807),
    'PositiveSmallIntegerField': (0, 32767),
    'PositiveIntegerField': (0, 2147483647),
  }
代码语言:javascript
复制
12、models.IPAddressField  字符串类型(ip4正则表达式)
代码语言:javascript
复制
13、models.GenericIPAddressField  字符串类型(ip4和ip6是可选的)
  参数protocol可以是:both、ipv4、ipv6  验证时,会根据设置进行报错
代码语言:javascript
复制
14、models.NullBooleanField  允许为空的布尔类型
代码语言:javascript
复制
15、models.PositiveIntegerFiel  正Integer
代码语言:javascript
复制
16、models.PositiveSmallIntegerField  正smallInteger
代码语言:javascript
复制
17、models.SlugField  减号、下划线、字母、数字
代码语言:javascript
复制
18、models.SmallIntegerField  数字
  数据库中的字段有:tinyint、smallint、int、bigint
代码语言:javascript
复制
19、models.TextField  字符串=longtext
代码语言:javascript
复制
20、models.TimeField  时间 HH:MM[:ss[.uuuuuu]]
代码语言:javascript
复制
21、models.URLField  字符串类型,地址正则表达式
代码语言:javascript
复制
22、models.BinaryField 二进制
代码语言:javascript
复制
23、models.ImageField   图片
代码语言:javascript
复制
24、models.FilePathField 文件
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档