• Django学习日志06


    模板层之过滤器

    # 过滤器给我们提供的有六十多个,但是我们只需要掌握10个以内即可
    # 过滤器名称就是函数名

    语法:
        {{ obj|filter__name:param }}  变量名字|过滤器名称:变量

    模板层之标签

    1. # {% if %}会对一个变量求值,如果它的值是True(存在、不为空、且不是boolean类型的false值),对应的内容块会输出。
    2. {% if num > 100 or num < 0 %}
    3. 无效

    4. {% elif num > 80 and num < 100 %}
    5. 优秀

    6. {% else %}
    7. 凑活吧

    8. {% endif %}
    9. if语句支持 andor、==、>、<、!=、<=、>=、innot inisis not判断。
    10. {% for key,val in dic.items %}
    11. {{ key }}:{{ val }}

    12. {% endfor %}
    13. {% for foo in d.keys %}
    14. {{ foo }}

    15. {% endfor %}
    16. {% for foo in d.values %}
    17. {{ foo }}

    18. {% endfor %}
    19. {% for foo in d.items %}
    20. {{ foo }}

    21. {% endfor %}
    22. forloop.counter The current iteration of the loop (1-indexed) 当前循环的索引值(从1开始)
    23. forloop.counter0 The current iteration of the loop (0-indexed) 当前循环的索引值(从0开始)
    24. forloop.revcounter The number of iterations from the end of the loop (1-indexed) 当前循环的倒序索引值(从1开始)
    25. forloop.revcounter0 The number of iterations from the end of the loop (0-indexed) 当前循环的倒序索引值(从0开始)
    26. forloop.first True if this is the first time through the loop 当前循环是不是第一次循环(布尔值)
    27. forloop.last True if this is the last time through the loop 当前循环是不是最后一次循环(布尔值)
    28. forloop.parentloop 本层循环的外层循环
    29. d = {'username':'kevin','age':18,'info':'这个人有点意思','hobby':[111,222,333,{'info':'NB'}]}
    30. # with起别名
    31. {% with d.hobby.3.info as nb %}
    32. {{ nb }}

    33. with语法内就可以通过as后面的别名快速的使用到前面非常复杂获取数据的方式
    34. {{ d.hobby.3.info }}

    35. {% endwith %}
    36. {% with total=business.employees.count %}
    37. {{ total }} employee{{ total|pluralize }}
    38. {% endwith %}
    39. 不要写成as

    模板的继承和导入

    1. {% extends 'home.html' %}
    2. {% block css %}
    3. {% endblock %}
    4. {% block js %}
    5. {% endblock %}
    6. {% include 'haha.html' %}

    模型层

    1. 单表的操作
    create
    update
    delete
    all
    first
    filter

    1. res = models.User.objects.create(name='jason', age=18, register_time='2002-1-21')
    2. print(res)
    3. import datetime
    4. ctime = datetime.datetime.now()
    5. user_obj = models.User(name='egon', age=84, register_time=ctime)
    6. user_obj.save()

     删

    1. res = models.User.objects.filter(pk=2).delete()
    2. print(res)
    3. user_obj = models.User.objects.filter(pk=1).first()
    4. user_obj.delete()
    5. """
    6. pk会自动查找到当前表的主键字段 指代的就是当前表的主键字段
    7. 用了pk之后 你就不需要指代当前表的主键字段到底叫什么了
    8. uid
    9. pid
    10. sid
    11. ...
    12. """

     改

    1. models.User.objects.filter(pk=4).update(name='egonDSB')
    2. user_obj = models.User.objects.get(pk=4)
    3. user_obj = models.User.objects.filter(pk=6)
    4. """
    5. get方法返回的直接就是当前数据对象
    6. 但是该方法不推荐使用
    7. 一旦数据不存在该方法会直接报错
    8. 而filter则不会
    9. 所以我们还是用filter
    10. """
    11. user_obj.name = 'egonPPP'
    12. user_obj.save()

    常见的查询方式

    # 必知必会13条
    1.all()  查询所有数据

     2.filter()     带有过滤条件的查询
     3.get()        直接拿数据对象 但是条件不存在直接报错
     4.first()      拿queryset里面第一个元素

     res = models.User.objects.all().first()
     print(res)
     5.last()
     res = models.User.objects.all().last()
     print(res)

     6.values()  可以指定获取的数据字段  select name,age from ...     列表套字典
     res = models.User.objects.values('name','age')  #
     print(res)
     7.values_list()  列表套元祖
     res = models.User.objects.values_list('name','age')  #
     print(res)
        # """
        #  # 查看内部封装的sql语句
        #  上述查看sql语句的方式  只能用于queryset对象
        #  只有queryset对象才能够点击query查看内部的sql语句
        #
     """
     8.distinct()  去重
     res = models.User.objects.values('name','age').distinct()
     print(res)
        """
        去重一定要是一模一样的数据
        如果带有主键那么肯定不一样 你在往后的查询中一定不要忽略主键
        
        """
     9.order_by()
     res = models.User.objects.order_by('age')  # 默认升序
     res = models.User.objects.order_by('-age')  # 降序

     print(res)
    10.reverse()  反转的前提是 数据已经排过序了  order_by()
    res = models.User.objects.all()
    res1 = models.User.objects.order_by('age').reverse()
    print(res,res1)

    11.count()  统计当前数据的个数
    res = models.User.objects.count()
     print(res)
    12.exclude()  排除在外

    res = models.User.objects.exclude(name='jason')
    print(res)

    13.exists()  基本用不到因为数据本身就自带布尔值  返回的是布尔值
    res = models.User.objects.filter(pk=10).exists()
    print(res)

    测试脚本

    1. """
    2. 当你只是想测试django中的某一个py文件内容 那么你可以不用书写前后端交互的形式
    3. 而是直接写一个测试脚本即可
    4. 脚本代码无论是写在应用下的tests.py还是自己单独开设py文件都可以
    5. """
    6. # 测试环境的准备 去manage.py中拷贝前四行代码 然后自己写两行
    7. import os
    8. import sys
    9. if __name__ == "__main__":
    10. os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day64.settings")
    11. import django
    12. django.setup()
    13. # 在这个代码块的下面就可以测试django里面的单个py文件了

    查看内部sql语句的方式

    方法1:

    1. res = models.User.objects.values_list('name','age') #
    2. print(res.query)

     queryset对象才能够点击query查看内部的sql语句

    方法2:所有的sql语句都能查看
    # 去配置文件中配置一下即可

    1. LOGGING = {
    2. 'version': 1,
    3. 'disable_existing_loggers': False,
    4. 'handlers': {
    5. 'console':{
    6. 'level':'DEBUG',
    7. 'class':'logging.StreamHandler',
    8. },
    9. },
    10. 'loggers': {
    11. 'django.db.backends': {
    12. 'handlers': ['console'],
    13. 'propagate': True,
    14. 'level':'DEBUG',
    15. },
    16. }
    17. }

    基于双下划线的查询

    1. 双下划线查询
    2. 1 年龄大于35岁的数据
    3. res = models.User.objects.filter(age__gt=35)
    4. print(res)
    5. 2 年龄小于35岁的数据
    6. res = models.User.objects.filter(age__lt=35)
    7. print(res)
    8. 大于等于 小于等于
    9. res = models.User.objects.filter(age__gte=32)
    10. print(res)
    11. res = models.User.objects.filter(age__lte=32)
    12. print(res)
    13. 年龄是18 或者 32 或者40
    14. res = models.User.objects.filter(age__in=[18,32,40])
    15. print(res)
    16. 年龄在1840岁之间的 首尾都要
    17. res = models.User.objects.filter(age__range=[18,40])
    18. print(res)
    19. 查询出名字里面含有s的数据 模糊查询
    20. res = models.User.objects.filter(name__contains='s')
    21. print(res)
    22. 是否区分大小写 查询出名字里面含有p的数据 区分大小写
    23. res = models.User.objects.filter(name__contains='p')
    24. print(res)
    25. 忽略大小写
    26. res = models.User.objects.filter(name__icontains='p')
    27. print(res)
    28. res = models.User.objects.filter(name__startswith='j')
    29. res1 = models.User.objects.filter(name__endswith='j')
    30. print(res,res1)
    31. 查询出注册时间是 2020 1
    32. res = models.User.objects.filter(register_time__month='1')
    33. res = models.User.objects.filter(register_time__year='2020')

  • 相关阅读:
    【5分钟背八股】03:说说你对aop的理解?
    QT性能分析调优
    Centos7.8安装docker ,jdk
    (附源码)springboot西安酷跑健身房管理系统 毕业设计 345421
    一本企业画册怎么制作成二维码分享
    树莓派(三)linux分文件编程和静态库与动态库编程
    Hutool基本用法介绍
    Github项目徽标
    【web3j】java调用链上合约里的方法
    Git Flow 工作流学习要点
  • 原文地址:https://blog.csdn.net/safvirtu/article/details/134449569