理解django框架中的MTV與MVC模式


1.Models:一個抽象層,用來構建和操作你的web應用中的數據,模型是你的數據的唯一的、權威的信息源。它包含你所儲存數據的必要字段和行為。通常,每個模型對應數據庫中唯一的一張表。

from django.db import models
# Create your models here.

class BlogsPost(models.Model):
    title = models.CharField(max_length = 150)
    body = models.TextField()
    timestamp = models.DateTimeField()

創建好模型就好了,剩下的由Django完成。Django會根據模型在數據庫中創建一個表

2.模板(templates):模板層提供了設計友好的語法來展示信息給用戶。使用模板方法可以動態地生成HTML。模板包含所需HTML 輸出的靜態部分,以及一些特殊的語法,描述如何將動態內容插入。

{% if latest_question_list %}
    <ul>
    {% for question in latest_question_list %}
        <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

3.視圖(views):用於封裝負責處理用戶請求及返回響應的邏輯。視圖可以看作是前端與數據庫的中間人,他會將前端想要的數據從數據庫中讀出來給前端。他也會將用戶要想保存的數據寫到數據庫。

#coding=utf-8
from django.shortcuts import render
from blog.models import BlogsPost
from django.shortcuts import render_to_response

# Create your views here.
def index(request):
    blog_list = BlogsPost.objects.all()
    return render_to_response('index.html',{'blog_list':blog_list})

查詢到BlogsPost數據庫里的所有數據,賦值給blog_list變量。

return render_to_response('index.html',{'blog_list':blog_list})

通過render_to_response() 返回給瀏覽器一個index.html頁面,並且將blog_list變量的值也返回給index.html。

4.MTV與MVC

MVC:Model 代表數據存取層,View 代表的是系統中選擇顯示什么和怎么顯示的部分,Controller 指的是系統中根據用戶輸入並視需要訪問模型,以決定使用哪個視圖的那部分。

以下是 Django 中 M、V 和 C 各自的含義:

  M ,數據存取部分,由django數據庫層處理,本章要講述的內容。 
  V ,選擇顯示哪些數據要顯示以及怎樣顯示的部分,由視圖和模板處理。
  C ,根據用戶輸入委派視圖的部分,由 Django 框架根據 URLconf 設置,對給定 URL 調用適當的 Python 函數。

C 是由框架自行處理,而 Django 里更關注的是模型(Model)、模板(Template)和視圖(Views), Django 也被稱為 MTV 框架 。在 MTV 開發模式中:

 M 代表模型(Model),即數據存取層。 該層處理與數據相關的所有事務: 如何存取、如何驗證有效
 T 代表模板(Template),即表現層。 該層處理與表現相關的決定: 如何在頁面或其他類型文檔中進行顯示。
 V 代表視圖(View),即業務邏輯層。 該層包含存取模型及調取恰當模板的相關邏輯。 你可以把它看作模型與模板之間的橋梁。

  如果你熟悉其它的 MVC Web開發框架,比方說 Ruby on Rails,你可能會認為 Django 視圖是控制器,而Django 模板是視圖。 很不幸,這是對 MVC 不同詮釋所引起的錯誤認識。 在 Django 對 MVC 的詮釋中,視圖是用來描述要展現給用戶的數據;而不是數據如何展現 。

參考:
1.Django文檔

2.Django的是如何工作的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM