模板匯入和繼承+模型層:單表操作
1、web應用:
-s包括兩部分:web伺服器 和 application
-目前階段django專案用的web伺服器是:wsgiref + application
-上線會用uwsgi + application
-web伺服器(本質是socket)都實現了wsgi協議
-wsgi:web服務閘道器介面,是一個協議
2、模板的匯入和繼承
-如何引入靜態檔案(static目錄的配置)
-模板的匯入:
1 寫一個好看的模板
2 在想用的地方
{% include "好看模板的名字.html" %}
-模板的繼承
-寫一個母版(留一些block(盒子)),留的盒子越多,可擴充套件性就越高
{% block top %}
{% endblock %}
-使用:
-在一個新的html中
-{%extend 'base.html'%}
-擴寫留的對應的盒子
{% block top %}
擴寫的內容
{% endblock %}
-注意:
1 擴寫的時候,盒子的位置無所謂,只要名字對應正確,就會正確填充
2 盒子可以不擴寫,不寫就是原來的樣子
3 如果要顯示母版盒子中原來的東西,需要
{{block.super}}----寫在哪,原來的內容就放在哪
3、靜態檔案 相關
1 直接寫死:<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
2 用static標籤:需要一個引數(返回靜態檔案路徑)
{% load static %}
<link rel='stylesheet' href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
3 用get_static_prefix: (返回資料夾路徑(需要自己拼接檔案路徑))
{%load static %}
<link rel="stylesheet" href="{% 用get_static_prefix %}bootstrap-3.3.7-dist/css/bootstrap.css">
4、inclusing_tag:返回html片段
1 前面幾步跟標籤和過濾器一樣
2 裝飾器:@register.inclusiong_tag("inclusiongtag.html",)
3 返回一個字典,字典中的值,可以在inclusiongtag中使用
4 使用:
{%load 你寫的那個py檔案%}
{% 函式名字 引數 引數 %}
5、模型層:
單表操作:
-增加,刪,改:兩種方式:queryset物件的方法,book物件的方法
-改:需要用save()
-get()方法:查詢的資料有且只有一條,如果多、少都拋異常
單表查詢:
queryset物件才有query,他就是原生SQL
-<1> all(): 查詢所有結果
<2> filter(**kwargs): 它包含了與所給篩選條件相匹配的物件
<3> get(**kwargs): 返回與所給篩選條件相匹配的物件,返回結果有且只有一個,如果符合篩選條件的物件超過一個或者沒有都會丟擲錯誤。
<4> exclude(**kwargs): 它包含了與所給篩選條件不匹配的物件
<5> order_by(field): 對查詢結果排序('-id')
<6> reverse(): 對查詢結果反向排序
<8> count(): 返回資料庫中匹配查詢(QuerySet)的物件數量。
<9> first(): 返回第一條記錄
<10> last(): 返回最後一條記錄
<11> exists(): 如果QuerySet包含資料,就返回True,否則返回False
<12> values(field): 返回一個ValueQuerySet——一個特殊的QuerySet,執行後得到的並不是一系列 model的例項化物件,而是一個可迭代的字典序列
<13> values_list(field): 它與values()非常相似,它返回的是一個元組序列,values返回的是一個字典序列
<14> distinct(): 從返回結果中剔除重複紀錄
單表基於雙下劃線的模糊查詢
Book.objects.filter(pricein=[100,200,300]) #在列表範圍內
Book.objects.filter(pricegt100) #大於
Book.objects.filter(pricelt=100) #小於
Book.objects.filter(pricegte=100) #大於等於
Book.objects.filter(pricelte=100) #小於等於
Book.objects.filter(pricerange=[100,200]) #在100~200之間
Book.objects.filter(titlecontains="python") #包含“python”
Book.objects.filter(titleicontains="python") #不區分大小寫
Book.objects.filter(titlestartswith="py") #以“py”開頭
Book.objects.filter(pub_dateyear=2012) #匹配時間 年 為“2012”的
book=models.Book.objects.filter(pub_datamonth='01') #匹配時間 月 為“01”的
book=models.Book.objects.filter(pub_dataday='11') #匹配時間 日 為“11”的