日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django的是如何工作的

發布時間:2025/6/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django的是如何工作的 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果你看過我之前所寫的關于django的文章的話,你會發現每一篇都具有可操作性,都是從創建項目開始的,雖然中間之加了一些要講解的重點。這也是我博文的特點,我希望在你看到我這一篇文章的時候是可操作的,不管是否具備了相關基礎。

如果你是第一次接觸django,建議參考我的之關于django的內容練習一下:

http://www.cnblogs.com/fnng/category/581256.html

?

這一篇要介紹django是如何工作的。如果你把這過程梳理清晰了,那么你對django就算入門了。

?

一張流程圖告訴你django的處理流程:

?

URL組成 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?

  作為網站的用戶,我們首先在瀏覽器的輸入框內輸入:http://127.0.0.1:8000/index/

?

URL地址由以下幾部分組成:

協議類型:?HTTP?,FTP?

  HTTP協議(HyperText?Transfer?Protocol,超文本傳輸協議)是用于從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它可以使瀏覽器更加高效,使網絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示等?。

HTTPS(全稱:Hyper?Text?Transfer?Protocol?over?Secure?Socket?Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。

?

主機地址:itest.info??,127.0.0.1

前者是一個網址,網址通過域名解析服務器會找到對應的IP地址。后者就是一個IP地址。

127.0.0.1?指向的就是本機的IP地址。

?

端口號:?8000

端口號用于區分標識同一臺主機的不同應用。一臺主機上有很多應用,你訪問我這臺主機時如果指定的是8000,那么就是知道是你來訪問我用django開發的blog的。當然,這個端口是可以任意分配的。

?

路徑?:?/index/??、/admin

一般用來表示主機上的一個目錄或文件地址。

?

?

urls的配置 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

?

  django通過urls.py配置文件很好的處理了前端請求的指向,其中使用使用Python的正則表達式可以使匹配變得更靈活。

打開django下面的urls.py文件:

from django.conf.urls import patterns, include, url from django.contrib import adminurlpatterns = patterns('',url(r'^admin/', include(admin.site.urls)),url(r'^index/$', 'blog.views.index'), )

?r'^index/$'

這是一個使用了python的正則表達式。

字符串有前面加“?r?”是為了防止字符串中出現類似“\t”字符時被轉義。

?

  django在拿到URL地址后,取端口號后面的文件夾路徑(/index/)進行配置,結果^index/$?可以對這個文件路徑進行匹配。那么將指向blog.views.index?這個地址。

blog是文件夾,views是一個.py文件,index?則是函數名。

?

?

model模型 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?

  Django用模型在后臺執行SQL代碼并把結果用Python的數據結構來描述。Django也使用模型來呈現SQL無法處理的高級概念。

  模型用于數據庫的創建,在settings.py文件中配置數據庫的連接,例如一個mysql數據庫的配置:

…… DATABASES = {'default': {'ENGINE' : 'django.db.backends.mysql','HOST' : '127.0.0.1','PORT' : '3306','NAME' : 'myweb','USER' : 'user','PASSWORD' : '123456',} } ……

?  配置信息從上到下依次是驅動(ENGINE),主機地址(HOST),端口號(PORT),數據庫(NAME),登錄用戶名(USER),登錄密碼(PASSWORD)。

  在應用的的models.py文件中創建模型,為了避免直接操作數據庫,通過創建模型去生成對應的數據庫表。

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()

?

  執行數據庫同步會創建一張PlogsPost表,表分別會有title、body、timestamp三個字段。其中title定義為char類型,定義最長150字符;body為text文本類型;timestamp為日期時間類型。

  我們不用關心到底怎么創建表,只要創建好模型就好了,剩下的由djnago來幫我們生成對應的表。下面是將模型創建成數據庫表的命令:

D:\pydj\myweb>python manage.py makemigrations blog Migrations for 'blog':0001_initial.py: - Create model BlogsPost D:\pydj\myweb>python manage.py syncdb Operations to perform:Apply all migrations: admin, blog, contenttypes, auth, sessions Running migrations:Applying blog.0001_initial... OK

?

  首先是通過?makemigrations對某個應用(blog)下的模型執行遷移;然后通過syncdb檢測項目下的所有模型,發現模型有變動或未生成表,將重新生成相應的表。(在djnaog?1.7之前的版本只需要syncdb一個命令就可以完成同步)

?

?

views視圖 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?

?  視圖可以看作是前端與數據庫的中間人,他會將前端想要的數據從數據庫中讀出來給前端。他也會將用戶要想保存的數據寫到數據庫。

views.py

#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})

?

這里index函數做了兩件事兒:

blog_list?=BlogsPost.objects.all()

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

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

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

?

?

templates模板 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

?

  模板就是我們所熟悉的頁面了,django自帶的有模板系統。它的主要作用是如何展示數據,比如視圖返回了一堆數據過來。是都循環顯示出來呢?還通過判斷只顯示你認為有用的呢??當然,這里為了使頁面更漂亮需要借助前端技術,比如css、JavaScript等。

  然后,我們就在瀏覽器上看到了index.html頁面了:

?

?

?

MTV開發模式 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

?

了解了django的組成部分之間,我們再來深入的探討一下django的開發模式。

  MTV?開發模式

  在鉆研更多代碼之前,讓我們先花點時間考慮下?Django?數據驅動?Web?應用的總體設計。 我們在前面章節提到過,Django?的設計鼓勵松耦合及對應用程序中不同部分的嚴格分割。?遵循這個理念的話,要想修改應用的某部分而不影響其它部分就比較容易了。?在視圖函數中,我們已經討論了通過模板系統把業務邏輯和表現邏輯分隔開的重要性。?在數據庫層中,我們對數據訪問邏輯也應用了同樣的理念。 把數據存取邏輯、業務邏輯和表現邏輯組合在一起的概念有時被稱為軟件架構的?Model-View-Controller(MVC)模式。?在這個模式中,?Model?代表數據存取層,View?代表的是系統中選擇顯示什么和怎么顯示的部分,Controller?指的是系統中根據用戶輸入并視需要訪問模型,以決定使用哪個視圖的那部分。

  為什么用縮寫?

  像?MVC?這樣的明確定義模式的主要用于改善開發人員之間的溝通。?比起告訴同事,“讓我們采用抽象的數據存取方式,然后單獨劃分一層來顯示數據,并且在中間加上一個控制它的層”,一個通用的說法會讓你收益,你只需要說:“我們在這里使用MVC模式吧。”。 Django?緊緊地遵循這種?MVC?模式,可以稱得上是一種?MVC?框架。?以下是?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?的詮釋中,視圖用來描述要展現給用戶的數據;不是數據?如何展現?,而且展現?哪些?數據。?相比之下,Ruby?on?Rails?及一些同類框架提倡控制器負責決定向用戶展現哪些數據,而視圖則僅決定?如何展現數據,而不是展現?哪些?數據。

  兩種詮釋中沒有哪個更加正確一些。?重要的是要理解底層概念。

總結

以上是生活随笔為你收集整理的Django的是如何工作的的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。