Django(六)
模板语法之标签
在模板html中使用if else for
{% for foo in l %}
{# {{ forloop }}#}
{% if forloop.first %}
第一次
{% elif forloop.last %}
最后一次
{% else %}
{{ foo }}
{% endif %}
{% for foo in user_dict.keys %}
{{ foo }}
{% for foo in user_dict.values %}
{{ foo }}
{% for foo in user_dict.items %}
{{ foo }}
模板继承
一个页面被其他页面公共使用
{% block css %}
{% block js %}
测试环境搭建
配置环境
在test.py文件中
import os
if name == "main":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day06.settings")
import django
django.setup()
# 代码都要写在这个下面
from app01 import models
ORM查询方法
from app01 import models
get方法
models.Book.objects.create(title='西游记',price=111)
models.Book.objects.create(title='三国演义',price=111)
models.Book.objects.create(title='水浒传',price=111)
1. all, first()
res = models.Book.objects.all().first()
res = models.Book.objects.all().last() # 最后一个
print(res)
2. get
res = models.Book.objects.filter(pk=1).first() # None
'''一般不推荐使用get方法'''
# res = models.Book.objects.get(pk=11) # 查询的数据必须存在,不存在直接报错
# print(res)
3. exclude
res = models.Book.objects.exclude(pk=1) # 查询pk=1之外的数据,其实就是排除数据
4. order by
select *from t1 order by id asc, price desc, title asc
res = models.Book.objects.order_by('id') # 默认是升序
res = models.Book.objects.order_by('-id', 'price') # 默认是降序
5. 翻转
res = models.Book.objects.order_by('id').reverse() # 默认是降序
print(res)
6. count
sql: select count(1) from t1
res = models.Book.objects.filter(price=100).count()
print(res)
7. exists
res = models.Book.objects.filter(pk=1).first()
8. values()
sql:select title, price from t1
掌握
res = models.Book.objects.values('title', 'price') # 列表套字典
res1 = models.Book.objects.values_list('title', 'price') # 列表套元祖
print(res)
print(res1)
去重:一定不加主键,因为主键特点就是唯一且非空
sql: select distinct id from t1
res = models.Book.objects.values('title', 'price').distinct()
基于双下滑线的查询
基于双下滑线的查询
1. 查询书籍价格大于200的
sql: select * from t1 where price > 200
ORM:gt => greater than equal # 大于等于
res = models.Book.objects.filter(price__gt=200).all()
res = models.Book.objects.filter(price__gte=200).all()
print(res)
2. 查询书籍价格小于200的
res = models.Book.objects.filter(price__lt=200).all()
res1 = models.Book.objects.filter(price__lte=200).all()
print(res)
print(res1)
3. 查询书籍价格是111, 200的所有书籍
sql:select * from t1 where price = 111 or price = 200
sql:select * from t1 where price in (111, 200)
in走索引,not in 不走索引
res = models.Book.objects.filter(price__in=[111, 200]).all()
print(res)
4. 查询书籍价格在100-300之间的
sql:select * from t1 where price >= 100 and price <= 300
sql: select *from t1 where price between 100 and 300
顾头顾尾
res = models.Book.objects.filter(price__range=[100, 300]).all()
print(res)
5. 查询书籍名称带有西的所有书籍
like查询不走索引
es: elasticsearch
sql:select * from t1 where title like '西%'
res = models.Book.objects.filter(title__contains='西').all()
返回结果一定是queryset对象,才能点query属性
print(res.query) # 查看SQL语句
print(res)
'''
select book.id, book.title from t1
create table db1.t (id int, name varchar(16))
'''
6. 查询以西开头结尾的数据
res = models.Book.objects.filter(title__startswith='西').all()
res = models.Book.objects.filter(title__endswith='西').all()
7. 以时间查询: 2021-10-5
res = models.Book.objects.filter(create_time__year=2021, create_time__month=10,create_time__day=5)
查看SQL执行语句
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level':'DEBUG',
},
}
}

浙公网安备 33010602011771号