Django第九日
模型层models
一 常用和非常用字段、参数概览
常用字段
IntegerField
整数
AutoField
自增
BooleanField
布尔
CharField
varchar
DateField
年月日
DateTimeField
年月日时分秒
DecimalField
小数
FileField
上传文件,本质是varchar
ImageField
图片,本质是varchar,继承了FileField
TextField
存大文本
EmailField
本质是varchar
非常用字段
BigAutoField
SmallIntegerField
PositiveSmallIntegerField
正小整数
PositiveIntegerField
正整数
BigIntegerField
'AutoField': 'integer AUTO_INCREMENT',
'BigAutoField': 'bigint AUTO_INCREMENT',
'BinaryField': 'longblob',
'BooleanField': 'bool',
'CharField': 'varchar(%(max_length)s)',
'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',
'DateField': 'date',
'DateTimeField': 'datetime',
'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)',
'DurationField': 'bigint',
'FileField': 'varchar(%(max_length)s)',
'FilePathField': 'varchar(%(max_length)s)',
'FloatField': 'double precision',
'IntegerField': 'integer',
'BigIntegerField': 'bigint',
'IPAddressField': 'char(15)',
'GenericIPAddressField': 'char(39)',
'NullBooleanField': 'bool',
'OneToOneField': 'integer',
'PositiveIntegerField': 'integer UNSIGNED',
'PositiveSmallIntegerField': 'smallint UNSIGNED',
'SlugField': 'varchar(%(max_length)s)',
'SmallIntegerField': 'smallint',
'TextField': 'longtext',
'TimeField': 'time',
'UUIDField': 'char(32)',
常用参数
null
max_length
default
primary_key
unique
db_index
choices
:比较常用(后面再说)
blank
: django admin里提交数据,限制
元数据(必须记住)
写在创建表的类里面,是类中类
class Meta:
# 改表名,记得迁移
db_table = "book"
# 联合索引
index_together = [
("name", "publish"),
]
# 联合唯一索引
unique_together = (("name", "publish"),)
# 了解
# admin中显示的表名称
verbose_name='图书表' # admin中显示样式为verbose_name加s
verbose_name_plural='图书表' # admin中显示样式为verbose_name_plural
二 打印原生sql
配置文件settings.py中写入,建议直接粘贴
CV打法好哇!
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level':'DEBUG',
},
}
}
三 查询单表记录API
以下都属于objects的方法
all()
: 查询所有结果filter(**kwargs)
: 它包含了与所给筛选条件相匹配的对象get(**kwargs)
: 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。exclude(**kwargs)
: 它包含了与所给筛选条件不匹配的对象order_by(*field)
: 对查询结果排序,(给排序方法加减号代表降序,如:’-id’)reverse()
: 对查询结果反向排序,必须结合order_by,如:order_by(‘id’).reverse(),等同于order_by(’-id’)count()
: 返回数据库中匹配查询(QuerySet)的对象数量。first()
: 返回第一条记录last()
: 返回最后一条记录exists()
: 如果QuerySet包含数据,就返回True,否则返回False,说白了就是判断结果有没有值values(*field)
: 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列values_list(*field)
: 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列distinct()
: 从返回结果中剔除重复纪录
四 基于双下划线的模糊查询
1 价格在[100,200,300]这个范围内
Book.objects.filter(price__in=[100,200,300])
2 大于,小于,大于等于,小于等于
Book.objects.filter(price__gt=100)
Book.objects.filter(price__lt=100)
Book.objects.filter(price__gte=100)
Book.objects.filter(price__lte=100)
3 范围
Book.objects.filter(price__range=[100,200])
4 包含
Book.objects.filter(title__contains="python")
5 忽略大小写包含
Book.objects.filter(title__icontains="python")
6 以xx开头
Book.objects.filter(title__startswith="py")
7 时间类型,年份是2012年的
Book.objects.filter(pub_date__year=2012)
五 删除表记录
删除的两种方式
第一种:queryset的delete方法
res=models.Book.objects.all().delete()
print(res)
第二种:对象自己的delete方法
book = models.Book.objects.all().filter(name='金瓶梅').first()
print(type(book))
res=book.delete()
六 修改表记录
修改记录
第一种:queryset的update方法
res=models.Book.objects.filter(publish='东京').update(name='金瓶梅1') # 将出版社都是东京的书,统一改名
print(res)
第二种:对象自己的
book = models.Book.objects.filter(name='xxx').last()
book.name='asdfasd'
book.save()
七 python脚本中调用django环境
在脚本中调用djagno服务
在项目根目录创建创建py文件
import os
if __name__ == '__main__':
#1 引入django配置文件
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'day67.settings')
# 2 让djagno启动
import django
django.setup()
# 3 使用表模型
from app01 import models
models.Book.objects.create(name='测试书籍',publish='xx出版社') # 插入数据
八 补充
时区和国际化问题
setting.py
中
- 后台管理汉语问题
LANGUAGE_CODE = 'zh-hans'
管理后台看到的就是中文 - 时区问题(使用东八区)
TIME_ZONE = 'Asia/Shanghai' USE_TZ = False
django admin(管理后台的简单使用)
-
管理后台是django提供的可以快速对表进行增删查改操作
-
创建一个后台管理账号
python3 manage.py createsuperuser
- 输入用户名
- 输入邮箱(可以不填,敲回车)
- 输入密码
- 确认密码
超级用户创建出来了,可以登录管理后台了
-
让admin中表中一行一行的数据显示我们定制的样子的方法
重写模型类的__str__方法,也就是与class Meta
同层级添加def __str__
blank参数作用
- 需要把book表注册到admin中
在app下的admin.py
中写
from app01 import models
把book表注册一下,管理后台就能看到了
admin.site.register(models.Book)
- 可以在后台快速的对book表进行增删查改操作