Django Web開發
第19章 Django框架web開發
-
Django是使用Python編寫,基於MVC模式的框架,因為在Django中,控制器接收客戶端請求的角色是由框架自行處理的,所以在Django開發中,更關注的是模型、模板、檢視的MTV模式:
-
模型(Model),即資料存取層,用於處理與資料相關的相關事務。
-
模板(Template),即表現層,用於處理與變現相關的決定,例如如何實現頁面顯示。
-
檢視(View),即業務邏輯層,是模型與模板之間的橋樑,檢視處理使用者請求,僅僅決定展現哪些資料給使用者。
-
-
搭建Django環境
- 使用包管理工具pip:
pip install django
easy_install django
-
Django常用命令(終端視窗命令)
-
新建Django專案:
django-admin startproject project_name
-
新建應用程式:
django-admin startapp app_name
-
同步資料庫:
python manage.py makemigrations python manage.py migrate
-
開發伺服器,該伺服器方便開發和除錯程式:
python manage.py runserver 8080
(預設埠8000)。 -
清空資料庫:
python manage.py flush
-
開啟Django環境終端:
python manage.py shell
-
-
Django中包括model, url, view, template四大模組,分別對應了MVC模式的不同功能。
19.1 實現第一個Django專案
-
終端進入根目錄 E:\ 進行指令
django-admin startproject firstproject
,會看見E盤生成以下目錄。-
【manage.py】 一個實用的命令列工具,能以各種方式與該Django專案進行互動。
-
【_init_.py】 一個空檔案,告訴Python該目錄是一個Python專案。
-
【settings.py】 該Django專案的配置檔案。
-
【urls.py】 該Django專案的URL宣告,一份有Django驅動的網站資源目錄。
-
【wsgi.py】 一個WSGI相容的web伺服器入口,用於執行專案。
-
【asgi.py】 與ASGI相容的web伺服器為您的專案提供服務的入口點。
-
-
終端進入【firstproject】專案目錄,執行
python manage.py startapp learn
新建應用【learn】,會看見出現以下子目錄。
-
在配置檔案【settings.py】中找到
INSTALLED_APPS
新增以下程式碼,註冊新建的應用,這樣Python可以自動找到模板檔案和靜態檔案。 -
在應用目錄【learn】中開啟檢視檔案【views.py】編寫檢視函式,用於顯示訪問頁面時的內容。
#-*- coding: utf-8 -*- from django.http import HttpResponse # 引入http響應訊息物件 def index(request): # 第一個引數必須是request物件,用於接收處理請求。 return HttpResponse(u"歡迎光臨,這裡是第一個Django專案應用!")
-
開啟【urls.py】檔案,新增下列程式碼,建立url對映,關聯這個檢視函式。
-
終端執行
python manage.py runserver
執行測試伺服器,預設埠8000,開啟瀏覽器訪問localhost:8000,成功訪問了專案應用。
19.2 URL路徑對映和傳參
-
Django專案中的URL模組和view模組對應的是MVC模式中的controller。檢視是伺服器收到使用者請求後,展示返回的內容,而當伺服器收到請求後,Django會根據專案下的【urls.py】檔案中的路徑對映,去相應的檢視模組查詢處理函式,再返回頁面資料給客戶端。
-
兩個傳參方法:
-
path() :實現路徑對映和正常引數傳遞,格式:<型別:變數名>或<變數名>。
-
re_path() :實現正則表示式的路徑對映和引數傳遞,格式:(?P<變數名>表示式)。
-
例如將一個專案【blog】的【urls.py】檔案中如下設定:
from django.contrib import admin from django.urls import path, re_path from blog_app import views urlpatterns = [ # 使用普通路徑對映和引數傳遞。 path("blog/article/<int:id>/", views.article, name="article"), # 使用正則表示式路徑對映和引數傳遞。 re_path(r"^blog/article/(?P<id>\d+)/$", views.article, name="article"), path("admin/", admin.site.urls), ]
-
-
設定路徑對映時,可以將路徑命名一個別名,相當於給URL命名一個全域性變數,在網頁模板中使用較為方便,如:
//使用url別名作錨鏈接 <a href="{% url "article" id %}">文字</a> //使用普通url作錨鏈接 <a href="blog/article/id">文字</a>
-
url別名只能在網頁模板中使用,而不能在 view中使用,因此要用 reverse() 方法轉化成普通url在 view中使用。
from django.urls import reverse url = reverse("blog:article",args=[id]) # 專案名blog可作為名稱空間。
-
urls模組的path方法目前不能指向一個基於類的檢視,Django的解決辦法是提供一個as_visw()方法將一個類偽裝成方法。
from django.contrib import admin from django.urls import path from blog_app import views urlpatterns = [ path("", views.ArticleClass.as_view(), name = "article_class"), path("admin/", admin.site.urls), ]
-
在配置url路徑對映時,可以設定自定義傳入額外的引數:
from django.contrib import admin from django.urls import path from blog_app import views urlpatterns = [ path("blog/article/<int:id>/", views.article, name = "article", {"bg":"black","display":3}), path("admin/", admin.site.urls), ]
19.3 view檢視
-
Django框架中,檢視view通常和url路由一起工作,當伺服器收到客戶端請求後,會根據在【urls.py】檔案中的路徑對映,去檢視中查詢相應的處理函式,在返回http網頁資訊。
-
實際web開發中,view模組不僅要負責從資料庫提取資料,而且需要設定用於顯示內容的模板,並提供模板渲染頁面所需的內容物件。
-
render(request, template_path, context_obj, content_type)方法:用於轉發請求給模板,並返回模板內容。
-
get_object_or _404():預設呼叫Django的get方法,如果請求的資源不存在,則丟擲http404狀態。
-
專案示例待完善。。