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',               },            }         }
相關文章
相關標籤/搜索