Django模板及表查询笔记

模板层   后端朝html页面传递数据      两种给html页面传递数据的方式      第一种:         render(request,'index.html',{'user_list':user_list})      第二种         render(request,'index.html',locals())      后端能够给html传递的数据有哪些         python全部的基本数据类型         函数名(传函数名会自动加括号执行)         对象(至关于在前端页面打印了该对象)                  前端访问容器类型数据的属性或方法统一采用句点符(.)         有序类型  直接点索引访问         字典    直接点key         在调用函数或方法的时候不支持传参               过滤器      n|length 统计长度      n|default:'不存在'      n|date:'Y-m-d'      n|filesizeformat      n|slice:'0:8:2'      n|truncatechars:10      n|truncatewords:10      n|add:1            n|safe            先后端取消转义的方式         前端转义            |safe         后端转义            from django.utils.safestring import mark_safe()            mark_safe("<h1>我是h1标签</h1>")   标签      {% for foo in user_list%}         {{ foo }}         {{ forloop }}         {% empty %}            当传递给个人循环对象是个空的状况下才会走empty下面的代码块      {% endfor %}         {% if flag %}         flag有值      {% elif tag %}         tag有值      {% else %}         两个都没值      {% endif %}            前端模板语法for循环和if判断也能够嵌套使用            {% with hobby.2.1.2.1.2.3.4.3 as h%}         {{ h }}         {{ hobby.2.1.2.1.2.3.4.3 }}      {% endwith %}      自定义过滤器,标签,inclusion_tag      必备三步走战略         1.在应用下新建一个名字必须叫作templatetags文件夹         2.在新建的文件夹下新建一个任意名的py文件(my_tag.py)         3.在新建的py文件中固定写下面两句话            from django import template            register = template.Library()                  # 自定义过滤器            @register.filter(name='baby')            def index(a,b):               return a+b                  # 自定义标签            @register.simple_tag(name='index')            def index(a,b,c,d):               return a+b+c+d                  # 自定义inclusion_tag            @register.inclusion_tag('login.html',name='xxx')            def index(n):               # 产生login.html小页面所须要的数据               return {"data":data}                                       html中如何使用自定义的过滤器,标签,inclusion_tag         # 先加载            {% load my_tag %}                        {{ num|baby:10 }}                        {% index 1 2 3 4 %}                        {% xxx 10 %}      模板的继承与导入   index.html      {% block content %}         主页内容      {% endblock %}      继承模板      {% extends 'index.html'%}         {% block content %}         {{ block.super }}         子页面内容      {% endblock %}         模板的导入      {% include 'login.html' %}         ps:一个模板中一般block块儿越多页面的可扩展性越强      通常习惯性的取三块儿内容      css      content      js   静态文件配置   {% load static %}   两种动态获取路径的方式      <link rel='stylesheet' href="{% static 'css/mycss.css'%}">  # 第一种方式      <link rel='stylesheet' href="{% get_static_prefix %}css/mycss.css">  # 第二种方式      模型层   django ORM操做      关键性字段及参数         DateField  年月日         DateTimeField  年月日时分秒            auto_now:每次操做改数据都会自动更新时间            auto_now_add:新增数据的时候会将当前时间自动添加,后续的修改该字段不会自动更新         单独的py文件测试ORM操做须要配置的参数   import os   if __name__ == "__main__":      os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day58.settings")      import django      django.setup()      from app01 import models  # 这一句话必须在这下面导入         主要是queryset对象就能够无限制的点queryset方法(*******************)   models.User.objects.filter().filter().filter().count()            单表查询      **********************************查询方法******************************************            <1> all():                  查询全部结果            <2> filter(**kwargs):       它包含了与所给筛选条件相匹配的对象            <3> get(**kwargs):          返回与所给筛选条件相匹配的对象,返回结果有且只有一个,若是符合筛选条件的对象超过一个或者没有都会抛出错误。(源码就去搂一眼~诠释为什么只能是一个对象)            <4> exclude(**kwargs):      它包含了与所给筛选条件不匹配的对象            <5> order_by(*field):       对查询结果排序('-id')/('price')                        <6> reverse():              对查询结果反向排序  >>>前面要先有排序才能反向            <7> count():                返回数据库中匹配查询(QuerySet)的对象数量。            <8> first():                返回第一条记录            <9> last():                返回最后一条记录            <10> exists():              若是QuerySet包含数据,就返回True,不然返回False            <11> values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后获得的并非一系列                             model的实例化对象,而是一个可迭代的字典序列            <12> values_list(*field):   它与values()很是类似,它返回的是一个元组序列,values返回的是一个字典序列            <13> distinct():            从返回结果中剔除重复纪录            返回queryset对象的方法      all()      filter()      exclude()      order_by()      reverse()      distinct()            values()       返回一个可迭代的字典序列      values_list() 返回一个可迭代的元祖序列      多表查询      表与表之间的关系      一对一(OneToOneField):一对一字段不管建在哪张关系表里面均可以,可是推荐建在查询频率比较高的那张表里面      一对多(ForeignKey):一对多字段建在多的那一方      多对多(ManyToManyField):多对多字段不管建在哪张关系表里面均可以,可是推荐建在查询频率比较高的那张表里面      ps:如何判断表与表之间究竟是什么关系      换位思考         A能不能有多个B         B能不能有多个A            add()  # 添加      set()  # 修改      remove()  # 不能接收可迭代对象      clear()  # 清空 不用传参      正向与反向的概念         正向查询按字段,反向查询按表名小写...         # 一对一         # 正向:author---关联字段在author表里--->authordetail       按字段         # 反向:authordetail---关联字段在author表里--->author       按表名小写            # 查询jason做者的手机号   正向查询            # 查询地址是 :山东 的做者名字   反向查询                 # 一对多         # 正向:book---关联字段在book表里--->publish    按字段         # 反向:publish---关联字段在book表里--->book    按表名小写_set.all() 由于一个出版社对应着多个图书      # 多对多         # 正向:book---关联字段在book表里--->author     按字段         # 反向:author---关联字段在book表里--->book     按表名小写_set.all() 由于一个做者对应着多个图书            # 查询出版社是东方出版社出版的书籍                  一对多字段的反向查询      # publish_obj = models.Publish.objects.filter(name='东方出版社').first()      # print(publish_obj.book_set)  # app01.Book.None      # print(publish_obj.book_set.all())            # 查询做者jason写过的全部的书                      多对多字段的反向查询      # author_obj = models.Author.objects.filter(name='jason').first()      # print(author_obj.book_set)  # app01.Book.None      # print(author_obj.book_set.all())            # 查询做者电话号码是110的做者姓名                   一对一字段的反向查询      # authordetail_obj = models.AuthorDetail.objects.filter(phone=110).first()      # print(authordetail_obj.author.name)         F与Q查询               配置文件配置参数查看全部orm操做内部的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',               },            }         }
相关文章
相关标签/搜索