Django的MTV模式詳解


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

一、MVC模型

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

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

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

  

二、MTV模型

Django的MTV分別代表:

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

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

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

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

  

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

三、Django基本命令

1、 下載Django

pip3 install django

2、創建一個django project

django-admin.py startproject mysite

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

  

文件介紹:

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

3、在mysite目錄下創建應用

python manage.py startapp blog

  

4、啟動django項目

python manage.py runserver 8080

  這樣我們的django就啟動起來了!當我們訪問:http://127.0.0.1:8080/時就可以看到:

  

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

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

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

6、清空數據庫

python manage.py flush

  此命令會詢問是 yes 還是 no, 選擇 yes 會把數據全部清空掉,只留下空表。

7、創建超級管理員

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

8、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比較熟悉,可能喜歡這種方式。

9、查看更多命令

python manage.py

  查看所有的命令,在忘記子名稱的時候非常有用。

10、靜態文件配置

(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

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

Django的路由層(URLconf)

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

Django的視圖層

六、模板層(template)

Django的模板層(template)

七、模型層基礎(model)

model基礎

八、模型層進階(model)

model進階

 


免責聲明!

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



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