Django的MTV模式詳解

參考博客:https://www.cnblogs.com/yuanchenqi/articles/7629939.htmlcss

1、MVC模型

  Web服務器開發領域裏著名的MVC模式。html

  所謂MVC就是把Web應用分爲模型(M),控制器(C)和視圖(V)三層,他們之間以一種插件式的、鬆耦合的方式鏈接在一塊兒。python

  模型負責業務對象與數據庫的映射(ORM),視圖負責與用戶的交互(頁面),控制器接受用戶的輸入調用模型和視圖完成用戶的請求,其示意圖以下所示:jquery

  

2、MTV模型

Django的MTV分別表明:nginx

       Model(模型):負責業務對象與數據庫的對象(ORM)web

       Template(模版):負責如何把頁面展現給用戶shell

       View(視圖):負責業務邏輯,並在適當的時候調用Model和Template數據庫

       此外,Django還有一個urls分發器,它的做用是將一個個URL的頁面請求分發給不一樣的view處理,view再調用相應的Model和Template。Django WEB框架示意圖以下所示:django

  

  通常是用戶經過瀏覽器向咱們的服務器發起一個請求(request),這個請求回去訪問視圖函數,(若是不涉及到數據調用,那麼這個時候視圖函數返回一個模板也就是一個網頁給用戶),視圖函數調用模型,模型去數據庫查找數據,而後逐級返回,視圖函數把返回的數據填充到模板中空格中,最後返回網頁給用戶。瀏覽器

3、Django基本命令

一、 下載Django

pip3 install django

二、建立一個django project

django-admin.py startproject mysite

  在命令執行的當前目錄會生成mysite的工程,目錄結構以下所示:

  

文件介紹:

  • manage.py——Django項目裏面的工具,經過它能夠調用django shell和數據庫等。
  • settings.py——包含了項目的默認設置,包括數據庫信息,調試標誌以及其餘一些工做的變量。
  • urls.py——負責URL模式映射到應用程序。

三、在mysite目錄下建立應用

python manage.py startapp blog

  

四、啓動django項目

python manage.py runserver 8080

  這樣咱們的django就啓動起來了!當咱們訪問:http://127.0.0.1:8080/時就能夠看到:

  

五、同步更改數據庫表或字段(數據庫遷移)

'''
    python manage.py syncdb
     
    注意:Django 1.7.1 及以上的版本須要用如下命令
    python manage.py makemigrations
    python manage.py migrate
'''

  這種方法能夠建立表,當你在models.py中新增了類時,運行它就能夠自動在數據庫中建立表了,不用手動建立。

六、清空數據庫

python manage.py flush

  此命令會詢問是 yes 仍是 no, 選擇 yes 會把數據所有清空掉,只留下空表。

七、建立超級管理員

'''
    python manage.py createsuperuser
     
    # 按照提示輸入用戶名和對應的密碼就行了郵箱能夠留空,用戶名和密碼必填
     
    # 修改 用戶密碼能夠用:
    python manage.py changepassword username
    
'''

八、Django項目環境終端

(1)shell終端

python manage.py shell

  這個命令和 直接運行 python 進入 shell 的區別是:你能夠在這個 shell 裏面調用當前項目的 models.py 中的 API,對於操做數據的測試很是方便。

(2)數據庫終端

python manage.py dbshell

  Django 會自動進入在settings.py中設置的數據庫,若是是 MySQL 或 postgreSQL,會要求輸入數據庫用戶密碼。

在這個終端能夠執行數據庫的SQL語句。若是對SQL比較熟悉,可能喜歡這種方式。

九、查看更多命令

python manage.py

  查看全部的命令,在忘記子名稱的時候很是有用。

十、靜態文件配置

(1)生產環境——部署到web服務器處理(nginx)

  靜態文件交由web服務器處理,Django自己不處理靜態文件。簡單的處理邏輯以下:

 URI請求-----> 按照Web服務器裏面的配置規則先處理,以nginx爲例,主要求配置在nginx.
               conf裏的location
           |---------->若是是靜態文件,則由nginx直接處理
           |---------->若是不是則交由Django處理,Django根據urls.py裏面的規則進行匹配

  以上是部署到web服務器後的處理方式,爲了便於開發,Django提供了在開發環境的對靜態文件的處理機制。

(2)開發環境——static配置

  static主要指的是如css,js,images這樣的文件:

STATIC_URL = '/static/'      # 別名
STATICFILES_DIRS = (
    os.path.join(BASE_DIR,"static"),    # 實際名 ,即實際文件夾的名字
 )

  注意點1:django對引用名和實際名進行映射,引用時,只能按照引用名來,不能按實際名去找

<script src="/statics/jquery-3.1.1.js"></script>
------error-----不能直接用,必須用STATIC_URL = '/static/':
<script src="/static/jquery-3.1.1.js"></script>

  注意點2:

STATICFILES_DIRS = (
    ("app01",os.path.join(BASE_DIR, "app01/statics")),
)

<script src="/static/app01/jquery.js"></script>

  訪問地址:

http://127.0.0.1:8000/static/jquery.js

(3)開發環境——media配置

  settings.py:

MEDIA_URL="/media/"
MEDIA_ROOT=os.path.join(BASE_DIR,"app01","media","upload")

  urls.py:

from django.views.static import serve
url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}),

  訪問地址:

http://127.0.0.1:8000/media/1.png

  media配置總結:

        '''
        靜態文件的處理又包括STATIC和MEDIA兩類,這每每容易混淆,在Django裏面是這樣定義的:
        
        MEDIA:指用戶上傳的文件,好比在Model裏面的FileFIeld,ImageField上傳的文件。若是你定義
        
        MEDIA_ROOT=c:\temp\media,那麼File=models.FileField(upload_to="abc/")#,上傳的文件就會被保存到c:\temp\media\abc

        eg:
            class blog(models.Model):
                   Title=models.charField(max_length=64)
                   Photo=models.ImageField(upload_to="photo")
          上傳的圖片就上傳到c:\temp\media\photo,而在模板中要顯示該文件,則在這樣寫
          在settings裏面設置的MEDIA_ROOT必須是本地路徑的絕對路徑,通常是這樣寫:
                 BASE_DIR= os.path.abspath(os.path.dirname(__file__))
                 MEDIA_ROOT=os.path.join(BASE_DIR,'media/').replace('\\','/')

        MEDIA_URL是指從瀏覽器訪問時的地址前綴,舉個例子:
            MEDIA_ROOT=c:\temp\media\photo
            MEDIA_URL="/data/"
        在開發階段,media的處理由django處理:

           訪問http://localhost/data/abc/a.png就是訪問c:\temp\media\photo\abc\a.png

           在模板裏面這樣寫<img src="/media/abc/a.png">

           在部署階段最大的不一樣在於你必須讓web服務器來處理media文件,所以你必須在web服務器中配置,
           以便能讓web服務器能訪問media文件
           以nginx爲例,能夠在nginx.conf裏面這樣:

                 location ~/media/{
                       root/temp/
                       break;
                    }

           具體能夠參考如何在nginx部署django的資料。         
           '''
View Code

4、視圖層之路由配置系統(URLconf)

Django的路由層(URLconf)

5、視圖層之視圖函數(views)

Django的視圖層

6、模板層(template)

Django的模板層(template)

7、模型層基礎(model)

model基礎

8、模型層進階(model)

model進階

相關文章
相關標籤/搜索