jango的模板系統是Web應用開發中重要的一環,它使我們能夠將動態數據與靜態模板進行分離,從而實現更好的代碼維護性和可重用性。本文將解析Django模板系統實現機制,以及一些性能優化策略,幫助你更好地理解和使用Django的模板系統。
Django模板系統允許我們在模板中嵌入動態數據,并通過模板引擎將模板與數據進行渲染,最終生成HTML等格式的靜態頁面。模板系統使用特定的標記和語法來表示動態數據的插入和控制邏輯。
下面是一個簡單的Django模板示例:
<!DOCTYPE html>
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<h1>Hello, {{ user.username }}!</h1>
<ul>
{% for item in items %}
<li>{{ item }}</li>
{% endfor %}
</ul>
</body>
</html>
在上面的例子中,我們使用雙花括號{{ }}來表示要插入的動態數據,使用{% %}來表示控制邏輯(如循環、條件判斷等)。
Django模板渲染的實現機制可以分為以下幾個步驟:
模板渲染涉及對模板內容的解析和動態數據的替換,因此在性能方面需要考慮一些優化策略。
為了避免在每次渲染時都重新解析模板,我們可以將模板對象緩存起來。Django的模板引擎會自動進行模板對象的緩存,默認情況下使用內存緩存。這樣可以顯著提高模板渲染的性能,特別是當模板較大或模板加載頻繁時。
在渲染模板時,可能需要從數據庫中獲取動態數據。在進行數據庫查詢時,我們可以使用select_related和prefetch_related方法來優化查詢性能。這些方法可以減少數據庫查詢的次數,提高查詢效率。
在模板中,盡量避免復雜的邏輯和嵌套,因為模板標簽和邏輯會增加解析和渲染的時間。簡化模板結構有助于提高模板渲染的效率。
對于一些計算量較大或數據更新不頻繁的動態數據,可以使用緩存機制來緩存渲染結果,從而避免重復渲染。Django提供了緩存框架,可以方便地實現緩存策略。
本文解析了Django模板系統的實現機制,并介紹了一些性能優化策略。通過了解模板渲染的流程和性能優化方法,我們可以更好地利用Django模板系統來開發高效的Web應用。
昨晚應該是睡的最好一天吧,最近一個月睡眠好差,睡不著不說,而且半夜總醒,搞的我第二天就會超沒精神。
昨天下午去姐姐家,我剛進屋,小外甥直接就問我說:
老舅,你都很長時間沒來啦,**(前女友)哪去了, 我們都好久沒出溜溜了!
我頓了下說,她不喜歡我們了,等以后天暖和,我們再去溜溜。
才發現,忘掉一個人真的很難,明知道沒結果,還是沒法輕易做到波瀾不驚,不去想念。
視圖: 瀏覽器窗口展示出來的頁面內容,就是視圖。 html頁面: 在頁面上展示出的純文本內容,打開的瀏覽器頁面,就是html頁面
python manage.py startapp mycontent
在setting.py文件中,找到INSTALLED_APPS,并在最后一行添加如下內容:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mycontent',
]
在新建的應用下創建templates模板文件夾,在模板下創建content.html,代碼如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>content demo</title>
</head>
<body>
<h3>this is a content</h3>
</body>
</html>
接下來,需要將html與url綁定,啥意思,就是你訪問url連接可以看到你剛才的html文件內容。 我們需要在mycontent/views.py里寫視圖函數添加如下代碼:
from django.shortcuts import render
# Create your views here.
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse("Hello world ! django ~~")
def my_content(request):
return render(request, 'content.html')
在django_project/urls.py里添加url訪問路徑,示例代碼如下:
from django.conf.urls import url
from mycontent import views
urlpatterns = [
url('^$', views.index),
url('^my_content', views.my_content())
]
訪問http://127.0.0.1:8000/my_content可以看到效果如下:
主要有三個:path、re_path、url:
從path()和re_path()源碼看,path()的匹配規則是RoutePattern, re_path()匹配規則是RegexPattern
path = partial(_path, Pattern=RoutePattern)
re_path = partial(_path, Pattern=RegexPattern)
url()源碼,也是使用的re_path()
def url(regex, view, kwargs=None, name=None):
return re_path(regex, view, kwargs, name)
沿用博主的案例吧,就是分頁跳轉的例子,不能動態寫死,只需要用正則表達式匹配數字即可,匹配任意數字,可以用正則\d+匹配,如下所示:
url('^pagehelper=\d+$', views.pagehelper)
模擬場景就是,傳入非數字類型參數返回404 Not Found,在mycontent/views.py修改代碼如下:
# Create your views here.
from django.http import HttpResponse, Http404
from django.shortcuts import render
# Create your views here.
def index(request):
return HttpResponse("Hello world ! django ~~")
def my_content(request):
return render(request, 'content.html')
def pagehelper(request,num):
try:
num=int(num)
return render(request, 'content.html')
except:
raise Http404
在django_project/urls.py里添加url訪問路徑,示例代碼如下:
from django.conf.urls import url
from django.urls import re_path, path
from mycontent import views
urlpatterns = [
path("index/", views.index),
re_path('^$', views.index),
url('^$', views.index),
url('^my_content/$', views.my_content),
url('^my_content/page=(\d+)$', views.pagehelper),
]
效果:
這個報錯,主要是因為Django設置文件setting.py里面有個參數 DEBUG = True,將其更改為False,Django將顯示標準的404頁面。
默認顯示如下:
知識點:
效果如下:
一段感情開始容易,結束卻很難,它不是今天和明天的一刀切,分開了就是兩條路,它是過往習慣的終結,是愛過但也不再愛的承認,是一個人面對未知的勇氣,是從此一別兩寬、各生歡喜。
如果可以,我也想這么釋然,放過自己,不再這么內耗自己了。
個銷售管理系統,由基礎數據、員工信息、客戶管理、產品管理、銷售統計等功能組成,你若想一個人輕輕松松地開發完成,那我建議你采用Django3.0。
Django3.0用命令即可生成麻雀雖小五臟俱全的項目文件sales(系統架構),還可用命令生成功能模塊(base),程序員可通過配置項目文件,將功能模塊組合在一起。欲開發功能,先熟悉項目文件。
兩個sales文件,外層的sales,是存放項目內容的文件夾,這個名稱可以隨意更改,只要你喜歡就行。內層sales包含的settings.py、urls.py等文件,加上manage.py,便是Django的系統框架了。
__init__.py:內容一般是空的,常用來聲明(它)所在之處的文件夾(sales)是個包;
settings.py:包括了項目的初始化設置,對整個項目進行相關配置,比如數據庫連接參數、添加應用等;
asgi.py:構建異步Web界面和處理雙向協議的新方式,是Django3.0版本新出的異步功能;
urls.py:url地址秀,網站目錄,配置簡單容易理解,可把用戶在瀏覽器中發出的請求,映射到指定的應用程序上;
wsgi.py:告訴中間件(Apache或nginx):幫我運行Django開發的項目吧,我滴乖乖。開發過程中很少用到;
templates:存放HTML模板文件;
manage.py:Django的任務管理命令行工具。可用來生成數據庫遷移文件,同步表結構,生成App等,是項目中的管家。
在項目(sales)中的應用base,實際上是我們接下來要開發實現的銷售管理系統中的基礎數據功能模塊來的。在base下的文件,無論你想不想都要搞清楚。
migration:存放數據表結構的指令文件,通過它們可以修改和創建數據庫,從而在models.py模型類和數據庫表之間進行遷移;
__init__.py:內容有時不是空的,它來聲明base文件夾是個包;
admin.py:應用的連接,配置model,連接Form,聲明在Django自帶的后臺管理系統;
apps.py:通常里面包含對應用的配置,如應用名稱;
models.py:實體類定義,會生成對應的數據庫表結構。同時還具備操作數據庫的能力(API),省去手動編寫增刪改查的重復工作;
tests.py:單元測試工具,可以編寫測試文檔來測試所建立的應用;
views.py:雖然從名字上看是視圖的意思,實際上是邏輯控制用的,同web頁面交互,與models交流,協調整個系統有條不紊的動作。
一個軟件產品,在進入開發階段時,會先進行系統分析,分析的結果,最少包含3方面的內容(實際上肯定不止),有數據庫表結構(或實體類)、有業務流程圖,還有界面效果圖,而這三方面一般是由不同的人負責的。
專業的人做專業的事,才能提高工作效率,才能把活干得更好。再說,一個人拿一份工資,也不愿意干幾份活呀。正因為此,MVC, 模型(model)-視圖(view)-控制器(controller)模式運勢而生。
M(模型,Model):對數據邏輯內容進行處理,對數據庫表中的數據進行增刪改查操作。一般由程序猿負責開發實現,不一般的話,由老板自己完成,那還請你做什么?實體類(或表結構)由DBA設計,如果有這個崗位的話。
V(視圖,View):處理數據顯示(在界面上)的職責。由設計師負責,他們經常會對界面進行設計、設計、再設計。
C(控制器, controller):從視圖讀取數據,控制用戶輸入,向模型發送數據并最終導向視圖(進行展示)。也是程序猿負責,這就是導致他們禿頂的原因之一。
現在幾乎所有Web框架都基于MVC模式而設計,Django也不例外。只是為了彰顯不同的地位,Django特意采用了MVT模式。
MVT實際上和MVC是一致的,其中M是Model(模型),V(Views)是控制器,而T(templates)相當月MVC中的V,換湯不換藥,只是叫法不同而已。
在Django框架中,文件雖然不多,但完全有必要搞清楚它們的運行機制,否則開發了大半天的功能,還說不清道不明子丑寅卯的話,是會被人笑掉大牙的。
用戶通過瀏覽器訪問應用系統,中間件接受到請求之后,判斷其訪問的地址,接著:
1. 調用Django通過在ROOT_URLCONF配置來決定根URLconf;
2. Django在URLconf中的所有URL模式中,查找第一個匹配/地址/的條目;
3. 如果找到匹配,將調用相應的視圖函數;
4. 視圖函數返回一個HttpResponse;
5. Django轉換HttpResponse為一個適合的HTTP response,以Web page顯示出來。
好了,有關Djangon3.0項目詳解的內容,老陳講完了,下一節進入Django開發流程。如果覺得對你有所幫助,希望老鐵能轉發點贊,讓更多的人看到這篇文章。你的轉發和點贊,就是對老陳繼續創作和分享最大的鼓勵。
一個當了10年技術總監的老家伙,分享多年的編程經驗。想學編程的朋友,可關注:老陳說編程。我在分享Python,前端、Java和App方面的干貨。關注我,沒錯的。
#Python##Django##程序員##Web##項目實戰#
*請認真填寫需求信息,我們會在24小時內與您取得聯系。