'''
就是在模板里面使流程控制:if else elseif for
标签看起来像是这样的: {% tag %}
'''1.for标签
{%for person in person_list %}<p>{{ person.name }}</p>{% endfor %}
注:循环序号可以通过{{forloop}}显示
forloop.counter The current iteration of the loop (1-indexed) 当前循环的索引值(从1开始)
forloop.counter0 The current iteration of the loop (0-indexed) 当前循环的索引值(从0开始)
forloop.revcounter The number of iterations from the end of the loop (1-indexed) 当前循环的倒序索引值(从1开始)
forloop.revcounter0 The number of iterations from the end of the loop (0-indexed) 当前循环的倒序索引值(从0开始)
forloop.first Trueif this is the first time through the loop 当前循环是不是第一次循环(布尔值)
forloop.last Trueif this is the last time through the loop 当前循环是不是最后一次循环(布尔值)
forloop.parentloop 本层循环的外层循环
2.遍历字典
{%for key,val in dic.items %}<p>{{ key }}:{{ val }}</p>{% endfor %}{%for foo in d.keys %}<p>{{ foo }}</p>{% endfor %}{%for foo in d.values %}<p>{{ foo }}</p>{% endfor %}3.if 标签
{%if num >100or num <0%}<p>无效</p>{%elif num >80and num <100%}<p>优秀</p>{%else%}<p>凑活吧</p>{% endif %}if语句支持 and 、or、==、>、<、!=、<=、>=、in、notin、is、isnot判断。
4.with起别名
d ={'username':'kevin','age':18,'info':'这个人有点意思','hobby':[111,222,333,{'info':'NB'}]}{%with d.hobby.3.info as nb %}<p>{{ nb }}</p>
在with语法内就可以通过as后面的别名快速的使用到前面非常复杂获取数据的方式
<p>{{ d.hobby.3.info }}</p>{% endwith %}5.csrf_token
<form action="" method="post">{% csrf_token %}<inputtype="submit"></form>
方法:filterall first update delete create
1.增加数据
1.方式1:
models.UserInfo.objects.create(username='jack', password=123)
models.UserInfo.objects.create(username='json', password=543)
models.UserInfo.objects.create(username='py', password=342)
models.UserInfo.objects.create(username='java', password=1234223)
models.UserInfo.objects.create(username='js', password=23123)2.方式2:# res = models.UserInfo(username='tank', password=123)# res.save()2.查询数据
# 1.查询所有# res = models.UserInfo.objects.filter()# 或者
res = models.UserInfo.objects.filter().all()print(res)# 取出第一个# 为了防止空字典,需要trytry:print(res[0])# kevin# 取出第一个用户名print(res[0].username)# kevin# 取出第一个用户名对应的密码print(res[0].password)# 123except:pass
或者直接取出第一条
res = models.UserInfo.objects.filter().all().first()print(res)# kevin
取出最后一个
res = models.UserInfo.objects.filter().all().last()print(res)# js#2.默认查询所有字段
res = models.UserInfo.objects.values()print(res)# <QuerySet [{'id': 1, 'username': 'kevin', 'password': '123'}, {'id': 2, 'username': 'jack', 'password': '123'}, {'id': 3, 'username': 'json', 'password': '543'}, {'id': 4, 'username': 'py', 'password': '342'}, {'id': 5, 'username': 'java', 'password': '1234223'}, {'id': 6, 'username': 'js', 'password': '23123'}]># 3.查询id
res = models.UserInfo.objects.values('id')print(res)# <QuerySet [{'id': 1}, {'id': 2}, {'id': 3}, {'id': 4}, {'id': 5}, {'id': 6}]># 4.查询username
res = models.UserInfo.objects.values('username')print(res)# <QuerySet [{'username': 'kevin'}, {'username': 'jack'}, {'username': 'json'}, {'username': 'py'}, {'username': 'java'}, {'username': 'js'}]># 5.查询password
res = models.UserInfo.objects.values('password')print(res)# <QuerySet [{'password': '123'}, {'password': '123'}, {'password': '543'}, {'password': '342'}, {'password': '1234223'}, {'password': '23123'}]># values value_list# select id, username from table# select *from t;# 6.查询的结果是列表套字典
res = models.UserInfo.objects.values('username','password','id')# 默认查询所有的字段,for i in res:print(i.username)# 7.查询结果是列表套元组,其他的用法都跟values一样
res = models.UserInfo.objects.values_list('username')print(res[0])8.如何查看原生SQL语句
res = models.UserInfo.objects.values('username','password','id')print(res)# QuerySet对象,他都有一个属性query# 9.排序,默认是升序排,加个负号是降序排
res = models.UserInfo.objects.order_by('-id','age')# 降序print(res)# 10.反转:先排序,数据要先有序才能反转
res = models.UserInfo.objects.all().order_by('-id')print(res)# 11. 查看数量的
res = models.UserInfo.objects.count()print(res)# 6# 12.exclude 排除
res = models.UserInfo.objects.exclude(username='kevin')'''就是除了username=kevin的都打印出来'''print(res)# 13.exist,判断查询的数据是否存在
res = models.UserInfo.objects.filter(pk=20).first()print(res)# None# SELECT "app01_userinfo"."username", "app01_userinfo"."password", "app01_userinfo"."id" FROM "app01_userinfo"# print(res.query) # QuerySet对象,他都有一个属性query# 增加、更新、删除# object、行数、行数# 第二种方式查看SQL语句
五、测试环境的搭建
注意:tests.py的用法
制作django环境
import os
import sys
if __name__ =='__main__':
os.environ.setdefault('DJANGO_SETTINGS_MODULE','day58_dj.settings')import django
django.setup()
六、查看原生sql语句
往setting.py文件中加入以下代码,之后 **增、删、改、查** 就可以查看原生SQL语句了:
res = models.UserInfo.objects.values('id','username','password')print(res)# 必须打印才能在控制台输出原生SQL语句print(res.query)# 这句就不用再执行了
LOGGING ={'version':1,'disable_existing_loggers':False,'handlers':{'console':{'level':'DEBUG','class':'logging.StreamHandler',},},'loggers':{'django.db.backends':{'handlers':['console'],'propagate':True,'level':'DEBUG',},}}
七、基于双下滑线的查询
# 1.年龄大于35岁的数据
res = models.UserInfo.objects.filter(age__gt=35).all()print(res)# 2.年龄大于等于20岁的数据 e---------->equal
res = models.UserInfo.objects.filter(age__gte=20).all()print(res)# 3. 年龄是10 或者 20 或者 30
res = models.UserInfo.objects.filter(age__in=[10,20,300]).all()print(res)# 4.年龄在18到40岁之间的 首尾都要# from table where age between 18 and 40
res = models.UserInfo.objects.filter(age__range=[18,40])print(res)# 5. 查询出名字里面含有s的数据 模糊查询# from table where username like '%s%'
res = models.UserInfo.objects.filter(username__contains='s').all()print(res)# 6.用户名以s开头的
res = models.UserInfo.objects.filter(username__startswith='s').all()# like 's%'# res = models.UserInfo.objects.filter(username__endswith='s').all() # like '%s'print(res)# 7.查询出注册时间是 2023 5月
res = models.UserInfo.objects.filter(reg_time__month=5, reg_time__year=2023, reg_time__day=1).all()
res = models.UserInfo.objects.filter(reg_time__month=5, reg_time__day=1).all()print(res)