MCV思想:
M是指數據模型,V是指用戶界面,C則是控制器。使用MVC的目的是將M和V的實現代碼分離,從而使同一個程序可以使用不同的表現形式。比如一批統計數據你可以分別用柱狀圖、餅圖來表示。C存在的目的則是確保M和V的同步,一旦M改變,V應該同步更新。
優點:
1. 低耦合性
視圖層和業務層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼。
2. 高重用性&可適用性
MVC允許你使用不同樣式的視圖來訪問同一服務器端代碼,例如適用手機或者PC端購物,雖然購物方式不通,但是處理訂購產品的方式是一樣的。因為從模型返回的數據沒有進行格式化,所以可以被不同的界面使用:html/wap
MVT:
1. 瀏覽器發送請求到web服務器
2. Web服務器把這個請求轉交到一個WSGI
名詞解釋:WSGI
Python web開發中,服務端程序可分為2個部分:
服務器程序(用來接收、整理客戶端發送的請求)
應用程序(處理服務器程序傳遞過來的請求)
在開發應用程序的時候,我們會把常用的功能封裝起來,成為各種框架,比如Flask,Django,Tornado(使用某框架進行web開發,相當於開發服務端的應用程序,處理后台邏輯)
但是,服務器程序和應用程序互相配合才能給用戶提供服務,而不同應用程序(不同框架)會有不同的函數、功能。 此時,我們就需要一個標准,讓服務器程序和應用程序都支持這個標准,那么,二者就能很好的配合了
WSGI:wsgi是python web開發的標准,類似於協議。它是服務器程序和應用程序的一個約定,規定了各自使用的接口和功能,以便二和互相配合。
3. 請求生成一個被稱為environ的python字典,傳遞過去幾個中間件層,最終到達django應用
4. Urlconf包含在urls.py中,django找到對應url的視圖(View)看來處理http請求。(請求是httprequest,一個python字典對象)
5. 被選中的視圖要完成:
1) 通過模型與數據庫對話
2) 使用模板渲染html
3) 返回一個純文本響應
4) 拋出一個異常
6. Httpresponse對象離開django后被渲染成一個字符串
7. 在瀏覽器看到一個梅花的渲染后的web界面
編寫路由:
1. 需要先導入對應app的views文件
2. 對函數url()調用:接受三個實參:
1)第一個是一個正則表達式,r讓python將接下來的字符串視為原始字符串;引號告訴python正則表達式始於何處終於何處,脫字符^讓python查看字符串的開頭,美元符號$讓python查看字符串的末尾。 Python忽略項目的基礎url,如果不匹配返回錯誤界面。
2)第二個參數指定了要調用的視圖函數,匹配時將調用views.index
3)第三個將將這個url模式的名稱指定為index,當需要提供這個主頁的鏈接時可以使用這個名稱,而不編寫url。
編寫視圖:
導入HttpResponse模塊
Request參數必須有,封裝了用戶請求的所有內容
不可以直接return “hello world”,不能直接返回字符串,需要用這個類封起來,這是django的規則,不是python的。
通過上面兩個步驟,我們將index這個url指向了views里的index()函數,它接收用戶請求,並返回一個“hello world”字符串。
Render()根據視圖提供的數據渲染響應
定義模型:
所謂ORM:對象關系映射,主要實現模型對象到關系數據庫數據的映射
class Person(models.Model):
name = models.CharField(max_length=30)
age = models.IntegerField()
def __unicode__(self):
return self.name
Model是django中一個定義了模型基本功能的類,Person類含有兩個屬性:name和age。
屬性name是一個charfield,由字符或文本組成的數據。
Unicode方法是為了告訴django默認使用那個屬性來展示有關主題的信息。
建庫
python manage.py makemigrations
命令makemigrations讓django確定如何讓修改數據庫,
輸出表明django創建了一個0001.py的遷移文件,這個文件將在數據庫中為模型Person創建表。
Python manage.py migrate
應用了這種遷移,讓django替我們修改數據庫
管理網站:
Django提供的管理網站(admin site)讓我們可以輕松地處理模型,所以建立管理網站,添加person。
1. 創建超級用戶
python manage.py createsuperuser
2. 向管理網站注冊模型
from myapp.models import Person
# Register your models here.
admin.site.register(Person)
導入我們要注冊的模型Person
再使用admin.site.register()讓django通過管理網站管理我們的模型
from models import Person
# Create your views here.
def index(request):
#return HttpResponse("Hello World!")
return render(request,"index.html")
def person(request):
names = Person.objects.order_by(id)
context = {'names':names}
return render(request,'person.html',context)
<ul>
{% for name in names %}
<li>{{ name }}</li>
{% endfor %}
</ul>
<a href="{% url 'index' %}">index地址</a>