Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 中文字幕免费播放,国产日韩一区二区三区在线播放,中文字幕在线不卡精品视频99

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          Django 模板系統(tǒng)解析

          jango的模板系統(tǒng)是Web應(yīng)用開發(fā)中重要的一環(huán),它使我們能夠?qū)?dòng)態(tài)數(shù)據(jù)與靜態(tài)模板進(jìn)行分離,從而實(shí)現(xiàn)更好的代碼維護(hù)性和可重用性。本文將解析Django模板系統(tǒng)實(shí)現(xiàn)機(jī)制,以及一些性能優(yōu)化策略,幫助你更好地理解和使用Django的模板系統(tǒng)。

          1. 模板系統(tǒng)概述

          Django模板系統(tǒng)允許我們?cè)谀0逯星度雱?dòng)態(tài)數(shù)據(jù),并通過模板引擎將模板與數(shù)據(jù)進(jìn)行渲染,最終生成HTML等格式的靜態(tài)頁面。模板系統(tǒng)使用特定的標(biāo)記和語法來表示動(dòng)態(tài)數(shù)據(jù)的插入和控制邏輯。

          下面是一個(gè)簡(jiǎn)單的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>

          在上面的例子中,我們使用雙花括號(hào){{ }}來表示要插入的動(dòng)態(tài)數(shù)據(jù),使用{% %}來表示控制邏輯(如循環(huán)、條件判斷等)。

          2. 模板渲染的實(shí)現(xiàn)機(jī)制

          Django模板渲染的實(shí)現(xiàn)機(jī)制可以分為以下幾個(gè)步驟:

          1. 加載模板文件:Django從文件系統(tǒng)或緩存中加載模板文件,獲取模板內(nèi)容。
          2. 解析模板:Django解析模板內(nèi)容,識(shí)別模板標(biāo)簽和變量。
          3. 生成模板對(duì)象:Django根據(jù)解析結(jié)果生成模板對(duì)象,它是一個(gè)Python可執(zhí)行的對(duì)象。
          4. 傳入上下文數(shù)據(jù):在渲染模板時(shí),我們需要傳入一個(gè)上下文數(shù)據(jù)字典,其中包含了動(dòng)態(tài)數(shù)據(jù)的值。
          5. 渲染模板:Django模板引擎根據(jù)模板對(duì)象和上下文數(shù)據(jù),將動(dòng)態(tài)數(shù)據(jù)插入到模板中,生成最終的HTML文本。
          6. 生成靜態(tài)頁面:渲染完成后,Django將生成的HTML文本作為響應(yīng)返回給客戶端,生成靜態(tài)頁面。

          3. 模板渲染性能優(yōu)化策略

          模板渲染涉及對(duì)模板內(nèi)容的解析和動(dòng)態(tài)數(shù)據(jù)的替換,因此在性能方面需要考慮一些優(yōu)化策略。

          3.1. 緩存模板對(duì)象

          為了避免在每次渲染時(shí)都重新解析模板,我們可以將模板對(duì)象緩存起來。Django的模板引擎會(huì)自動(dòng)進(jìn)行模板對(duì)象的緩存,默認(rèn)情況下使用內(nèi)存緩存。這樣可以顯著提高模板渲染的性能,特別是當(dāng)模板較大或模板加載頻繁時(shí)。

          3.2. 使用select_related和prefetch_related優(yōu)化數(shù)據(jù)庫查詢

          在渲染模板時(shí),可能需要從數(shù)據(jù)庫中獲取動(dòng)態(tài)數(shù)據(jù)。在進(jìn)行數(shù)據(jù)庫查詢時(shí),我們可以使用select_relatedprefetch_related方法來優(yōu)化查詢性能。這些方法可以減少數(shù)據(jù)庫查詢的次數(shù),提高查詢效率。

          3.3. 減少不必要的模板標(biāo)簽和邏輯

          在模板中,盡量避免復(fù)雜的邏輯和嵌套,因?yàn)槟0鍢?biāo)簽和邏輯會(huì)增加解析和渲染的時(shí)間。簡(jiǎn)化模板結(jié)構(gòu)有助于提高模板渲染的效率。

          3.4. 使用緩存機(jī)制

          對(duì)于一些計(jì)算量較大或數(shù)據(jù)更新不頻繁的動(dòng)態(tài)數(shù)據(jù),可以使用緩存機(jī)制來緩存渲染結(jié)果,從而避免重復(fù)渲染。Django提供了緩存框架,可以方便地實(shí)現(xiàn)緩存策略。

          4. 結(jié)論

          本文解析了Django模板系統(tǒng)的實(shí)現(xiàn)機(jī)制,并介紹了一些性能優(yōu)化策略。通過了解模板渲染的流程和性能優(yōu)化方法,我們可以更好地利用Django模板系統(tǒng)來開發(fā)高效的Web應(yīng)用。

          在前面

          昨晚應(yīng)該是睡的最好一天吧,最近一個(gè)月睡眠好差,睡不著不說,而且半夜總醒,搞的我第二天就會(huì)超沒精神。

          昨天下午去姐姐家,我剛進(jìn)屋,小外甥直接就問我說:

          老舅,你都很長(zhǎng)時(shí)間沒來啦,**(前女友)哪去了, 我們都好久沒出溜溜了!

          我頓了下說,她不喜歡我們了,等以后天暖和,我們?cè)偃チ锪铩?/span>

          才發(fā)現(xiàn),忘掉一個(gè)人真的很難,明知道沒結(jié)果,還是沒法輕易做到波瀾不驚,不去想念。

          模板的使用

          1、視圖與html頁面

          視圖: 瀏覽器窗口展示出來的頁面內(nèi)容,就是視圖。 html頁面: 在頁面上展示出的純文本內(nèi)容,打開的瀏覽器頁面,就是html頁面

          2、創(chuàng)建應(yīng)用

          python manage.py startapp mycontent

          3、配置setting

          setting.py文件中,找到INSTALLED_APPS,并在最后一行添加如下內(nèi)容:

          INSTALLED_APPS = [
              'django.contrib.admin',
              'django.contrib.auth',
              'django.contrib.contenttypes',
              'django.contrib.sessions',
              'django.contrib.messages',
              'django.contrib.staticfiles',
              'mycontent',
          ]
          

          4、添加模板templates

          在新建的應(yīng)用下創(chuàng)建templates模板文件夾,在模板下創(chuàng)建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>
          

          5、url與視圖綁定

          接下來,需要將htmlurl綁定,啥意思,就是你訪問url連接可以看到你剛才的html文件內(nèi)容。 我們需要在mycontent/views.py里寫視圖函數(shù)添加如下代碼:

          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可以看到效果如下:

          6、urls.py配置規(guī)則

          主要有三個(gè):path、re_path、url

          • path 只能絕對(duì)匹配路徑地址,不支持正則匹配
          • re_path 支持正則匹配,django 1.x版本常用
          • url 支持正則匹配,實(shí)際上就是return re_path, django2.x版本推薦

          path()re_path()源碼看,path()的匹配規(guī)則是RoutePatternre_path()匹配規(guī)則是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)
          
          

          7、動(dòng)態(tài)url的處理

          沿用博主的案例吧,就是分頁跳轉(zhuǎn)的例子,不能動(dòng)態(tài)寫死,只需要用正則表達(dá)式匹配數(shù)字即可,匹配任意數(shù)字,可以用正則\d+匹配,如下所示:

          url('^pagehelper=\d+$', views.pagehelper)
          

          模擬場(chǎng)景就是,傳入非數(shù)字類型參數(shù)返回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),
          ]
          
          

          效果:

          這個(gè)報(bào)錯(cuò),主要是因?yàn)?/span>Django設(shè)置文件setting.py里面有個(gè)參數(shù) DEBUG = True,將其更改為FalseDjango將顯示標(biāo)準(zhǔn)的404頁面。

          默認(rèn)顯示如下:

          知識(shí)點(diǎn):

          • DEBUG=True:表示處于開發(fā)階段,默認(rèn)為True
          • DEBUG = False:表示開發(fā)完成正式發(fā)布產(chǎn)品上線
          • ALLOWED_HOSTS:域名訪問權(quán)限,設(shè)置可以訪問的域名,默認(rèn)值為空\[], 只允許localhost127.0.0.1在瀏覽器上訪問。
          • 修改DEBUG = False后,,必須重新啟動(dòng)服務(wù),同時(shí)需要加個(gè)ALLOWED_HOSTS 地址,如果想讓所以的域名都能訪問,可以設(shè)置為:ALLOWED_HOSTS = ["*"]
          • 修改后使用如下命令重啟:python manage.py runserver

          效果如下:

          寫在最后

          一段感情開始容易,結(jié)束卻很難,它不是今天和明天的一刀切,分開了就是兩條路,它是過往習(xí)慣的終結(jié),是愛過但也不再愛的承認(rèn),是一個(gè)人面對(duì)未知的勇氣,是從此一別兩寬、各生歡喜。

          如果可以,我也想這么釋然,放過自己,不再這么內(nèi)耗自己了。

          個(gè)銷售管理系統(tǒng),由基礎(chǔ)數(shù)據(jù)、員工信息、客戶管理、產(chǎn)品管理、銷售統(tǒng)計(jì)等功能組成,你若想一個(gè)人輕輕松松地開發(fā)完成,那我建議你采用Django3.0。

          Django3.0用命令即可生成麻雀雖小五臟俱全的項(xiàng)目文件sales(系統(tǒng)架構(gòu)),還可用命令生成功能模塊(base),程序員可通過配置項(xiàng)目文件,將功能模塊組合在一起。欲開發(fā)功能,先熟悉項(xiàng)目文件。

          2.1 項(xiàng)目文件

          兩個(gè)sales文件,外層的sales,是存放項(xiàng)目?jī)?nèi)容的文件夾,這個(gè)名稱可以隨意更改,只要你喜歡就行。內(nèi)層sales包含的settings.py、urls.py等文件,加上manage.py,便是Django的系統(tǒng)框架了。

          __init__.py:內(nèi)容一般是空的,常用來聲明(它)所在之處的文件夾(sales)是個(gè)包;

          settings.py:包括了項(xiàng)目的初始化設(shè)置,對(duì)整個(gè)項(xiàng)目進(jìn)行相關(guān)配置,比如數(shù)據(jù)庫連接參數(shù)、添加應(yīng)用等;

          asgi.py:構(gòu)建異步Web界面和處理雙向協(xié)議的新方式,是Django3.0版本新出的異步功能;

          urls.py:url地址秀,網(wǎng)站目錄,配置簡(jiǎn)單容易理解,可把用戶在瀏覽器中發(fā)出的請(qǐng)求,映射到指定的應(yīng)用程序上;

          wsgi.py:告訴中間件(Apache或nginx):幫我運(yùn)行Django開發(fā)的項(xiàng)目吧,我滴乖乖。開發(fā)過程中很少用到;

          templates:存放HTML模板文件;

          manage.py:Django的任務(wù)管理命令行工具。可用來生成數(shù)據(jù)庫遷移文件,同步表結(jié)構(gòu),生成App等,是項(xiàng)目中的管家。

          2.2 應(yīng)用文件

          在項(xiàng)目(sales)中的應(yīng)用base,實(shí)際上是我們接下來要開發(fā)實(shí)現(xiàn)的銷售管理系統(tǒng)中的基礎(chǔ)數(shù)據(jù)功能模塊來的。在base下的文件,無論你想不想都要搞清楚。

          migration:存放數(shù)據(jù)表結(jié)構(gòu)的指令文件,通過它們可以修改和創(chuàng)建數(shù)據(jù)庫,從而在models.py模型類和數(shù)據(jù)庫表之間進(jìn)行遷移;

          __init__.py:內(nèi)容有時(shí)不是空的,它來聲明base文件夾是個(gè)包;

          admin.py:應(yīng)用的連接,配置model,連接Form,聲明在Django自帶的后臺(tái)管理系統(tǒng);

          apps.py:通常里面包含對(duì)應(yīng)用的配置,如應(yīng)用名稱;

          models.py:實(shí)體類定義,會(huì)生成對(duì)應(yīng)的數(shù)據(jù)庫表結(jié)構(gòu)。同時(shí)還具備操作數(shù)據(jù)庫的能力(API),省去手動(dòng)編寫增刪改查的重復(fù)工作;

          tests.py:?jiǎn)卧獪y(cè)試工具,可以編寫測(cè)試文檔來測(cè)試所建立的應(yīng)用;

          views.py:雖然從名字上看是視圖的意思,實(shí)際上是邏輯控制用的,同web頁面交互,與models交流,協(xié)調(diào)整個(gè)系統(tǒng)有條不紊的動(dòng)作。

          2.3 MVC和MVT

          一個(gè)軟件產(chǎn)品,在進(jìn)入開發(fā)階段時(shí),會(huì)先進(jìn)行系統(tǒng)分析,分析的結(jié)果,最少包含3方面的內(nèi)容(實(shí)際上肯定不止),有數(shù)據(jù)庫表結(jié)構(gòu)(或?qū)嶓w類)、有業(yè)務(wù)流程圖,還有界面效果圖,而這三方面一般是由不同的人負(fù)責(zé)的。

          專業(yè)的人做專業(yè)的事,才能提高工作效率,才能把活干得更好。再說,一個(gè)人拿一份工資,也不愿意干幾份活呀。正因?yàn)榇耍琈VC, 模型(model)-視圖(view)-控制器(controller)模式運(yùn)勢(shì)而生。

          M(模型,Model):對(duì)數(shù)據(jù)邏輯內(nèi)容進(jìn)行處理,對(duì)數(shù)據(jù)庫表中的數(shù)據(jù)進(jìn)行增刪改查操作。一般由程序猿負(fù)責(zé)開發(fā)實(shí)現(xiàn),不一般的話,由老板自己完成,那還請(qǐng)你做什么?實(shí)體類(或表結(jié)構(gòu))由DBA設(shè)計(jì),如果有這個(gè)崗位的話。

          V(視圖,View):處理數(shù)據(jù)顯示(在界面上)的職責(zé)。由設(shè)計(jì)師負(fù)責(zé),他們經(jīng)常會(huì)對(duì)界面進(jìn)行設(shè)計(jì)、設(shè)計(jì)、再設(shè)計(jì)。

          C(控制器, controller):從視圖讀取數(shù)據(jù),控制用戶輸入,向模型發(fā)送數(shù)據(jù)并最終導(dǎo)向視圖(進(jìn)行展示)。也是程序猿負(fù)責(zé),這就是導(dǎo)致他們禿頂?shù)脑蛑弧?/p>

          現(xiàn)在幾乎所有Web框架都基于MVC模式而設(shè)計(jì),Django也不例外。只是為了彰顯不同的地位,Django特意采用了MVT模式。

          MVT實(shí)際上和MVC是一致的,其中M是Model(模型),V(Views)是控制器,而T(templates)相當(dāng)月MVC中的V,換湯不換藥,只是叫法不同而已。

          2.4 Django運(yùn)行

          在Django框架中,文件雖然不多,但完全有必要搞清楚它們的運(yùn)行機(jī)制,否則開發(fā)了大半天的功能,還說不清道不明子丑寅卯的話,是會(huì)被人笑掉大牙的。

          用戶通過瀏覽器訪問應(yīng)用系統(tǒng),中間件接受到請(qǐng)求之后,判斷其訪問的地址,接著:

          1. 調(diào)用Django通過在ROOT_URLCONF配置來決定根URLconf;
          2. Django在URLconf中的所有URL模式中,查找第一個(gè)匹配/地址/的條目;
          3. 如果找到匹配,將調(diào)用相應(yīng)的視圖函數(shù);
          4. 視圖函數(shù)返回一個(gè)HttpResponse;
          5. Django轉(zhuǎn)換HttpResponse為一個(gè)適合的HTTP response,以Web page顯示出來。

          好了,有關(guān)Djangon3.0項(xiàng)目詳解的內(nèi)容,老陳講完了,下一節(jié)進(jìn)入Django開發(fā)流程。如果覺得對(duì)你有所幫助,希望老鐵能轉(zhuǎn)發(fā)點(diǎn)贊,讓更多的人看到這篇文章。你的轉(zhuǎn)發(fā)和點(diǎn)贊,就是對(duì)老陳繼續(xù)創(chuàng)作和分享最大的鼓勵(lì)。

          一個(gè)當(dāng)了10年技術(shù)總監(jiān)的老家伙,分享多年的編程經(jīng)驗(yàn)。想學(xué)編程的朋友,可關(guān)注:老陳說編程。我在分享Python,前端、Java和App方面的干貨。關(guān)注我,沒錯(cuò)的。

          #Python##Django##程序員##Web##項(xiàng)目實(shí)戰(zhàn)#


          主站蜘蛛池模板: 中文字幕在线观看一区二区三区| 国产伦精品一区二区三区女| 亚洲国产AV无码一区二区三区| 国产丝袜一区二区三区在线观看| 色婷婷一区二区三区四区成人网 | 国产一区二区三区乱码在线观看| 一区二区三区无码高清视频| 日本一道高清一区二区三区| 蜜桃视频一区二区三区在线观看| 合区精品久久久中文字幕一区| 色综合视频一区二区三区44| 亚洲综合无码一区二区| 日本大香伊一区二区三区| 国产福利电影一区二区三区,亚洲国模精品一区 | 美日韩一区二区三区| 一本一道波多野结衣一区| 香蕉久久av一区二区三区| 国产亚洲综合一区柠檬导航 | 亚洲片国产一区一级在线观看| 成人无码精品一区二区三区| 亚洲中文字幕乱码一区| 亚洲一区二区三区高清不卡| 国产精品合集一区二区三区| 精品日韩亚洲AV无码一区二区三区| 国产主播一区二区| 国产自产V一区二区三区C| 日韩精品无码一区二区三区AV| 三上悠亚亚洲一区高清| 国产一区二区福利| 2021国产精品一区二区在线| 精品人妻AV一区二区三区| 亚洲高清美女一区二区三区| 亚洲视频一区二区三区四区| 国产一区在线mmai| 日本福利一区二区| 一区二区三区在线视频播放| 制服中文字幕一区二区| 无码日韩精品一区二区免费暖暖| 久久精品国产第一区二区三区 | 久久精品免费一区二区喷潮| 日韩美女视频一区|