1、web應用css
2、模板的導入與繼承html
3、靜態文件相關python
4、inclusion_tag:返回html片斷web
5、模型層sql
1、web應用數據庫
-s包括兩個部分:web服務器+applicationdjango
-目前階段django項目用的web服務器是:wsgiref+applicationbootstrap
-上線會用uwsgi+applicationapi
-web服務器(本質是socket)都實現了wsgi協議服務器
-wsgi:web服務網關接口,是一個協議
2、模板的導入與繼承
如何引入靜態文件(static目錄的配置):
在setting.py文件中配置:
# STATICFILES_DIRS名字必須叫它 STATICFILES_DIRS=[ os.path.join(BASE_DIR,'static'), ]
模板的導入:
1.寫一個好看的模板
<div> <div class="panel panel-primary"> <div class="panel-heading">同城交友</div> <div class="panel-body"> 聯繫電話:{{ a }} </div> </div> <div class="panel panel-danger"> <div class="panel-heading"> <h3 class="panel-title">潮流社區</h3> </div> <div class="panel-body"> 網站是: <a href="http://www.baidu.com">點我</a> </div> </div> </div>
2.用在想用的地方
{% include '模板的名字.html' %}
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css"> {% load static %} <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.css' %}"> <link rel="stylesheet" href="{% get_static_prefix %}bootstrap-3.3.7-dist/css/bootstrap.css"> {# <link rel="stylesheet" href="/statc999/">#} <title>Title</title> <style> .head { height: 60px; background: #1b6d85; } </style> </head> <body> <div class="head"></div> <div class="container-fluid"> <div class="row"> <div class="col-md-3"> {% include 'good.html' %} </div> <div class="col-md-9"> </div> </div> </div> </body> </html>
模板的繼承
-寫一個母版,base.html(留一些block(盒子)),留的盒子越多,可擴展性就越高
{% block top %}
{% endblock %}
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css"> {% load static %} <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.css' %}"> <link rel="stylesheet" href="{% get_static_prefix %}bootstrap-3.3.7-dist/css/bootstrap.css"> {# <link rel="stylesheet" href="/statc999/">#} {% block top %} {% endblock %} <title>Title</title> <style> .head { height: 60px; background: #1b6d85; } </style> </head> <body> <div class="head"></div> <div class="container-fluid"> <div class="row"> <div class="col-md-3"> {% include 'good.html' %} {% block left %} {% endblock %} </div> <div class="col-md-9"> {% block content %} <h1>我是母版的內容</h1> {% endblock %} </div> </div> </div> </body> </html>
使用:
-在一個新的html中
{% extend ’base.html‘ %}
擴寫留的對應的盒子
{% block top %}
擴寫的額內容
{% endblock %}
{% extends 'base.html' %} {% block left %} 我是首頁的內容 <h1>我是index的h1標籤</h1> 我是首頁的內容 {% endblock %} {% block content %} {{ block.super }} <h1>我是index的內容</h1> {{ block.super }} {% load my_tag %} {% lqz 5 'egon' %} {% endblock %}
{% extends 'base.html' %} {% block content %} 我是訂單的內容 <h1>我是order的h1</h1> <div> {% load my_tag %} {% mytest 50 'lqz' %} </div> {% endblock %} {% block top %} <link rel="stylesheet" href="/static/css/order.css"> {% endblock %}
注意:
1.擴寫的時候,盒子的位置無所謂,只要名字對應正確,就會正確填充
2.盒子能夠不擴寫,不謝就是原來的樣子
3.若是要寫實模板盒子中原來的東西,須要
{{ block.super }} --- 寫在哪,原來的內容就放在哪
3、靜態文件相關
1.直接寫死的:<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
2.用script標籤:
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.css' %}">
3.用get_stasic_prefix:
{% load static %}
<link rel="stylesheet" href="{% 用get_static_prefix %}bootstrap-3.3.7-dist/css/bootstrap.css">
<head> <meta charset="UTF-8"> <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css"> {% load static %} <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.css' %}"> <link rel="stylesheet" href="{% get_static_prefix %}bootstrap-3.3.7-dist/css/bootstrap.css"> {# <link rel="stylesheet" href="/statc999/">#} {% block top %} {% endblock %} <title>Title</title> <style> .head { height: 60px; background: #1b6d85; } </style> </head>
4、inclusion_tag:返回html片斷
1.前面幾部跟標籤和過濾器同樣,在app建立templatetags文件夾建立my_tag.py文件
2.裝飾器:@register.inclusion_tag('inclusion.html',name='lqz'),第一個參數是要操做的模板
from django.template import Library register=Library() @register.inclusion_tag('inclusiontag.html',name='lqz') def mytest(value,value2): ll= [ i for i in range(value)] return {'ll':ll,'a':value2}
3.返回一個字典,字典中的值,能夠在inclusion中使用
4.使用:
{%load 你寫的那個py文件 %}
{% 函數名字 參數 參數 %}
5、模型層
單表操做
-增長、刪除、改:兩種方式:queryset對象的方法,book對象的方法
-改:須要的save()
-get()方法:查詢的數據有且只有一條,若是多,少都會跑出異常
單表查詢
-<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(price__in=[100,200,300])
Book.objects.filter(price__gt100)
Book.objects.filter(price__lt=100)
Book.objects.filter(price__gte=100)
Book.objects.filter(price__lte=100)
Book.objects.filter(price__range=[100,200])
Book.objects.filter(title__contains="python")
Book.objects.filter(title__icontains="python")
Book.objects.filter(title__startswith="py")
Book.objects.filter(pub_date__year=2012)
import os if __name__ == '__main__': os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day81.settings") import django django.setup() from app01 import models # 單表的增長兩種 # date類型,傳的時候,能夠傳字符串(格式必須是:2018-06-17),能夠傳時間對象 # ret=models.Book.objects.create(name='洪流嗎',price=23.7,publish='北京出版社',pub_data='2018-06-17') # import datetime # ctime=datetime.datetime.now() # ret=models.Book.objects.create(name='西遊記',price=45.9,publish='南京出版社',pub_data=ctime) # 生成對象,再調save方法 # book=models.Book(name='三國演義',price=46.89,publish='南京出版社',pub_data='2017-08-17') # book.save() # 刪除(pk代指主鍵) # ret=models.Book.objects.filter(pk=1).delete() # book=models.Book.objects.filter(pk=1).first() # book.delete() #更新 # ret = models.Book.objects.filter(pk=2).update(name='ddd') # book=models.Book.objects.filter(pk=2).first() # book.name='XXX' # # 沒有update這個方法的 # # book.update() # # 既能夠保存,又能夠更新 # book.save() # get方法 # book = models.Book.objects.filter(pk=2).first() # book拿到的是 book對象 # get查到的數據有且只有一條 # book=models.Book.objects.get(name='XXX') # book=models.Book.objects.get(name='三國演義') # print(book.name) # 查詢的api(方法) # exclude(並列條件必須同時知足,也就是and) # book=models.Book.objects.exclude(name='三國演義',price=44) # # 必須是queryset對象纔有query,它就是原生的sql # print(book.query) # 如何定義一個支持鏈式操做的類(每一個方法返回的時候,返回對象自己) # 按價格升序排列 # book=models.Book.objects.all().order_by('price') # 倒序排列 # book = models.Book.objects.all().order_by('-price') # print(book.query) # # 必須有排序規則(在order_by以後用)才能調用reverse方法 # book = models.Book.objects.all().order_by('price').reverse() # book = models.Book.objects.all().reverse() # print(book.query) # book=models.Book.objects.all().filter(name='偶露菲').count() # book=models.Book.objects.all().count() # book=models.Book.objects.all().first() # print(book) # book=models.Book.objects.all().last() # queryset 能夠按索引取值,可是不支持負索引 # 能夠支持切片,其實sql就改了 # book = models.Book.objects.all()[10:15] # book=models.Book.objects.all().filter(name='xx').exists() # values :返回結果是queryset對象,裏面套字典 # book=models.Book.objects.all().values('name') # for i in book: # print(i.get('name')) # print(i['price']) # values :返回結果是queryset對象,裏面套元組 # book=models.Book.objects.all().values_list('name','price') # book=models.Book.objects.all().values('price').distinct() # 基於雙下劃線的模糊查詢 # 在列表範圍內 # book=models.Book.objects.filter(price__in=[44,45]) # print(book.query) # 大於 # book = models.Book.objects.filter(price__gt=44) # 大於等於 # book = models.Book.objects.filter(price__gte=44) # 小於 # book = models.Book.objects.filter(price__lt=44) # print(book) # # 小於等於 # book = models.Book.objects.filter(price__lte=45) # 在40--50之間 # book=models.Book.objects.filter(price__range=[40,50]) # print(book.query) # 包含 python # book = models.Book.objects.filter(name__contains='python') # 不區分大小寫的包含 # book = models.Book.objects.filter(name__icontains='python') # print(book.query) # 以XX開通 # book=models.Book.objects.filter(name__istartswith='X') # print(book.query) # print(book) # book=models.Book.objects.filter(name__endswith='義') # print(book.query) # book=models.Book.objects.filter(pub_data__year='2017') # book=models.Book.objects.filter(pub_data__month='01') # book=models.Book.objects.filter(pub_data__day='11') book=models.Book.objects.filter(pub_data__year='2017',pub_data__month='08') print(book.query) print(book)