1、相約Django。html
一、Django的特色:Django定義了服務分佈、路由映射、模板編程、數據處理的一套完整的功能。python
(1)集成數據訪問組件:Django的model層自帶數據庫ORM組件。web
(2)URL映射:Django使用正則表達式管理URL映射。正則表達式
(3)後臺管理系統自動生成。數據庫
二、Django的結構:Django遵循MVC架構的web開發框架。django
(1)管理工具management:內置的建立站點、遷移數據、維護靜態文件的命令工具。編程
(2)模型model:提供數據訪問接口和模塊。包括數據字、元數據、數據關係等。服務器
(3)視圖view:Django的視圖層封裝了HTTP request和response的一系列操做和數據流。主要是URL映射機制和綁定模板。數據結構
(4)模板temlate:一套Django本身的頁面渲染模板語言,用內置的tags和filters定義頁面的生成方式。架構
(5)表單form:經過內置的數據類型和控制組件生成HTML表單。
(6)管理站admin:經過聲明須要管理的model,快速生成後臺數據管理網站。
2、安裝Django。
Mac和Linux使用命令安裝:
Win安裝:若是你還未安裝Python環境須要先下載Python安裝包。
一、Python 下載地址:https://www.python.org/downloads/
二、Django 下載地址:https://www.djangoproject.com/download/
注意:目前Django 1.6.x以上版本已經徹底兼容Python 3.x。
安裝Python你只須要下載python-x.x.x.msi文件,而後一直點擊"Next"按鈕便可。
安裝完成後你須要設置Python環境變量。 右擊計算機->屬性->高級->環境變量->修改系統變量path,添加Python安裝地址,實例使用的是C:\Python33,你
須要根據你實際狀況來安裝。
3、組建第一個project。
一、建立project。
(1)字符終端Termiral下可使用命令:django-admin startproject XXOO(XXOO爲項目名,看心情隨意起)。
(2)建立成功後,切到項目名的路徑下:cd XXOO
在正規軍的當前目錄中創建了一個子目錄正規軍,並在其中生成了Django開發的默認文件。
正規軍/
manage.py :是Django用於管理本項目的命令行工具,進行站點運行,數據庫自動生成、靜態文件收集。
正規軍/ :內層的正規軍目錄中,包含了本次項目的實際文件。由於有__init__.py,全部這是一個Python包。
__init__.py
settings.py : 是Django項目的配置文件,其中定義了該項目引用的Django組件和Django項目名。
urls.py : 是維護項目的URL路由映射,即定義客戶端訪問的URL由哪個Python模塊解釋並提供反饋。默認是定義admin爲管理員站點的解釋器。
wsqi.py : 定義WSGI的接口信息,用於與其餘web服務器集成。
二、建立應用:
(1)命令建立包名:python manage.py startapp XO(XO爲包名,也就是應用包) 。
寫多個包app是爲了功能劃分,分開不一樣的業務線。
該包的功能是實現具體的某些功能。例如:admin-------是Django自帶的後臺管理的相關配置。
model-------是根據類建立的數據庫表,是寫類的。
test---------是進行單元測試的。
views(視圖)---這個包的函數,該包或該業務相關的具體的功能基本上都寫在這。
migration-----數據庫相關所使用的。
(2)views中的內容能夠造成一個包,將views中的具體功能函數每個都單獨寫。在使用中,能夠去views中調用方法便可,能夠對業務進行更細的劃分。
三、
Django知識點歸納:
4、Django視圖層:做用是銜接HTTP請求,Python程序,HTML模板
一、路由系統URL:本質是使URL和函數對應上關係。
(1)一一對應(靜態路由):爲一個URL對應一個相應的函數
/login/ ----> def login()
一個login對應一個login函數
(2)URL後能夠跟正則表達式(動態路由):(位置)
/login/(\正則表達式) /-----> 對應函數def
login/(\w+)/ ------> 這時的視圖函數不能以get收數據,而是以參數的形式接受 下面的a1就是那個參數。有多少個正則,就多少個a ~,而且是按順序接收 ^_^ !
def XXOO(request,a1):
print(a1)
return HttpResponse('......')
(\W+)取代了以前的?nid=XXXXX,這樣起到了SEO的優化,提升頁面的權重
(3)URL中的正則表達多,傳遞的參數多,能夠對傳參進行編號。(可命名)
/add—user/(?P<a1\d+)/ -----> def add_user(request,a1)
在正則前加上 ?P<a1> 的意思是在視圖函數中,找參數時,及時aXXXX是無序的,也會按照a後的號碼進行查找參數。
【1】終止符:在URL中加「/」或終止符$
【2】僞靜態:edit/(\w+).html 其中.html 就是僞靜態。
僞靜態:靜態網址的訪問速度高於動態網址,而僞靜態就是將動態網址假裝成靜態網址,提升訪問權重。加快訪問響應。
二、3在函數中均可用*args **kwargs 取代位置參數和可命名的參數,可是在url中也要統一用法。
(4)路由分發:(能夠設置默認頁面)
在與項目名相同包名的url文件中,加入Django.conf.urls 中導入的include方法,在URL中寫出指定的應用包名。例如app1,在使用include方法是項目包中的URL定位到app01的url並與app01中的URL相關聯,
url(r'^app01/', include('app01.urls')),
它的流程是在項目中的URL中匹配出app01的url,再在app01的URL中匹配出對應URL的函數去執行。
能夠指定URL,當訪問的URL不存在時,可使其跳轉到指定的頁面
在項目包的URL中:
from django.shortcuts import HttpResponse
def default(request):
return HttpResponse('.......')
在URL中:url(r'', default), 就能夠了。
也可使app01的錯誤頁面跳轉到指定的頁面
url(r' ', include('app01.url.index')), ,就能夠了。
(5)根據名稱反向生成URL:(給URL定義一個名字,之後就能夠經過名字找到URL,能夠經過名字反生成URL)
在項目包的URL中,URL用正則接受傳值,若是用(?P<a>\w+)那麼在views中的函數v的值就不能是args ,而是kwargs{‘a1’:11111111}
url(r' index/(\w+)', views.index, name='n1'),
在view中
from django.urls import reverse
def index(requrest):
user_list = [
' wangzhe', ' george', ' jony'
]
v = reverse('n1',args=(XXXXXXX)) args就是參數傳的值。
print(v)
return render()
在寫頁面是的action的URL地址就能夠寫成{ % url 「n1」%}
在取值時也能夠在a標籤中寫成{% url ‘n1’ i%}若是正則傳多值,那「 i 」就多加幾個,用空格隔開。
二、視圖函數:是Django中開發者處理HTTP請求的Python函數,視圖函數的功能是經過模型層對象處理數據,而後用(1直接構成HTTP body,2用數據渲染html模板文件,3若有邏輯錯誤,則返回http錯誤或其餘狀態)一種方法返回HttpResponse。
(1) 直接構造html頁面:直接在視圖函數中構造返回給客戶端的字符串,經過httpresponse()函數封裝後返回,給相應的服務器的時間給客戶端
from Django.http import httpResponse
import datetime
def current_datetime(request):
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
return HttpResponse(now)
(2)用數據渲染HTML模板文件:模板的內容能夠很是豐富,因此使用渲染模板文件的方法返回頁面是最多見的Django視圖函數技術,模板渲染經過render()函數實現。
from django.shortcuts import render
from app.models import Moment
def detail(request, moment_id):
m = Moment.objects.get(id = moment_id)
return render(request,'temlates/moment.html',{'headline':m.headline,'user':m.user_name})
render()函數中,第一個參數是http中的request的返回值,第二個參數是模板文件名,第三個參數是以字典形式表達的模板參數。
(3)返回HTTP錯誤:
HTTP錯誤經過HTTP頭中的status表達,經過給httpresponse構造函數傳遞status參數,能夠返回HTTP錯誤或狀態。
from django.http import HttpResponse
def my_view(request):
return HttpResponse(status=404)
三、模板語法:
(1)變量替換:
(2)過濾器:
(3)流程控制:
(4)模板繼承:
5、Django模塊層:主要是ORM的操做。
一、基本操做:Django模型開發的任務就是定義模型類和屬性。每一個模型類都均可以映射爲數據庫中的一個數據表,而類屬性被映射爲數據字段。數據庫表的主鍵,外鍵,約束,均可以經過類屬性完成定義。
(1)模型類的定義:基本結構↓^_^:
from django.db import models #全部的Django模型繼承都是來自Django.db models.Model類
class ModelName(models.Model):
field1 = models.XXfield(...........) #經過類屬性定義模型的字段,模型的字段必須是models.XXField類型
field2 = models.XXfield(...........)
.......
class Meta: ---------------#模型類中的meta子類定義模型元數據, 能夠定義數據庫表名,數據默認排列方式等。meta類的屬性名由Django預約義。
db_table = ...
other_metas = ...
經常使用的meta類的屬性:
abstract: True or False 標識本類是否爲抽象了。
app_label:定義本類的所屬應用,好比app_label = ‘myapp’
db_table:映射的數據表名,db_table = ‘moment’
注:如何meta中不提供db_table字段,那麼Django會爲模型自行生成數據表名,生成的格式會爲「應用名_模型名」,好比應用app的模型comment的默認數據表名爲「app_comment」
(2)普通字段的類型:
(3)經常使用字段的參數:
(4)基本查詢:
(5)數據保存及刪除:
二、關係操做:
(1)一對一:
(2)一對多:
(3)多對多:
三、面向對象的ORM:
ORM(Object Relational Mapping,簡稱ORM)爲對象關係映射,是爲了解決面向對象與關係數據庫之間互不匹配而產生的技術。
Django模型中的ORM之因此強大,是由於能夠支持模型繼承。它將Python的面向對象和數據庫面向關係表的數據結構相結合。就有了ORM的三種風格。
抽象類繼承:父類來自models.Model,但不會在底層數據庫中生成相應的數據表,父類的屬性列存儲在其子類的數據表中。
多表類繼承:多表繼承類的每一個模型都在底層數據庫中生成相應的數據表管理數據。
代理模型繼承: 父類用於在底層數據庫中管理數據表,而子類不定義數據列,只定義查詢數據集的排序方法等元數據。
(1)抽象類繼承:
(2)多表類繼承:
(3)代理模型繼承: