django 頁面靜態化實現

2021-10-08 01:48:44 字數 3802 閱讀 4080

1)概念

提前將頁面所用到的資料從資料庫查詢出來,然後生成乙個靜態頁面,之後使用者來訪問的時候,直接返回靜態頁面。

2)頁面靜態化步驟

a)模板:使用乙個模板將頁面用到的資料展示的**寫好。

b)在進行頁面靜態化的時候,從資料庫中查出頁面所需的資料,然後直接使用模板進行模板渲染,獲取渲染之後的靜態內容。

c)將靜態內容儲存成靜態檔案。

3)靜態頁面的資料和資料表中資料同步(靜態頁面的更新)

a)定時任務:將生成靜態檔案的方法新增到作業系統的定時任務中,然後由作業系統每隔一段時間呼叫一次對應的**。對於一些更新速度比較快的頁面,採用定時任務。(在django執行定時任務,可以通過django-crontab擴充套件來實現。)

b) 每當管理員通過admin介面修改頁面對應資料表中的資料時,重新執行生成靜態頁面的方法,讓靜態頁面和資料庫中資料保持同步。對於其他一些更新速度不是很快的頁面,採用第二種方法。

例1:首頁靜態化

將首頁採用頁面靜態化技術生成靜態頁面,使用者來訪問時直接返回靜態頁面。

首頁資料更新比較頻繁,所以首頁靜態頁面和資料表資料同步時,可以採用定時任務。

例2:商品詳情頁面靜態化

將資料表中的每個商品生成乙個對應的靜態詳情頁面,當使用者訪問某個商品時,直接返回對應商品的靜態詳情頁面。

使用celery定義任務函式。

補充:1)使用模板詳細步驟:

from django. template import loader

1.載入模板(指定所要使用的模板)

temp = loader .get_ template( '模板檔案路徑』)

2.模板渲染(將模板檔案中的變數進行替換,返回替換後的html內容)res_ html = temp . render (context= '傳遞給模板檔案的資料字典『

安裝

pip install django-crontab

在專案配置檔案中新增應用[.

..'django_crontab'

,# 定時任務..

.]

# 生成靜態化頁面的功能塊

from collections import ordereddict

from django.conf import settings

from django.template import loader

import os

import time

from goods.models import goodschannel

from

.models import contentcategory

defgenerate_static_index_html()

:"""生成靜態主頁的html檔案"""

# categories = ,{}, {}...],

# 'sub_cats': [,{}]}, {}, {}, ..]

# },

# 2:

# }print

('%s: generate_static_index_html'

% time.ctime())

categories = ordereddict(

)# 建立有序的字典

channels = goodschannel.objects.order_by(

'group_id'

,'sequence'

)for channel in channels:

group_id = channel.group_id # 當前所屬於的乙個組號

if group_id not

in categories:

categories[group_id]

=# 1:

# 2:

if group_id not

in categories:

categories[group_id]

=# 當前頻道的類別

cat1 = channel.category

# 追加頻道的資料

categories[group_id]

['channels'])

# 構建當前類別的子類別

for cat2 in cat1.goodscategory_set.

all():

cat2.sub_cats =

for cat3 in cat2.goodscategory_set.

all():

categories[group_id]

['sub_cats'

]# 廣告內容

contents =

content_categories = contentcategory.objects.

all(

)for cat in content_categories:

contents[cat.key]

= cat.content_set.

filter

(status=

true

).order_by(

'sequence'

)# 需然模板的上下文

context =

# 渲染模板

# 通過模板載入器載入出我們準備號的index.html

# get_template 會從settings中的template變數對應的dirs讀取templatesdes的模板檔案

# index.html 只是乙個臨時的檔案, 當我們的模板渲染完成,它就沒有用了 

template = loader.get_template(

"index.html"

)# 將構造好的上下文資料動態的渲染到'index.html'

html_text = template.render(context)

# 構造路徑

file_path = os.path.join(settings.generated_static_html_files_dir,

'index.html'

)# `在這裡插入**片`將我們的html_text寫入到指定的檔案

with

open

(file_path,

'w', encoding=

'utf-8'

)as f:

f.write(html_text)

# 生成的靜態html檔案儲存目錄

generated_static_html_files_dir = os.path.join(os.path.dirname(os.path.dirname(base_dir)),

'front_files'

)# 定時任務

cronjobs =

[# 每1分鐘執行一次生成主頁靜態檔案

('*/1 * * * *'

,'adverts.crons.generate_static_index_html'

,'>> /home/python/desktop/django_mall_ymx1/django_mall/logs/crontab.log')]

# 解決crontab中文問題

crontab_command_prefix =

'lang_all=zh_cn.utf-8'

開啟定時任務:

python manage.py crontab add

顯示已啟用的定時任務:

python manage.py crontab show

移除定時任務:

python manage.py crontab remove

php實現頁面靜態化

php生成靜態html頁面的方法 1.gid get gid 0 商品id goods statis file goods file gid.html 對應靜態頁檔案 expr 3600 24 10 靜態檔案有效期,十天 if file exists goods statis file else e...

PHP實現頁面靜態化

一 buffer認知 buffer php存在的緩衝區,乙個記憶體位址空間,主要用於儲存資料區域 可在php.ini中開啟引數 output buffering on 或者在php檔案中手動開啟 ob start 開啟輸出控制緩衝 ob get contents 返回輸出緩衝區內容 ob clean...

vue 實現頁面靜態化

使用 this.router.push location 來修改 url,完成頁面路由跳轉使用params來隱式傳遞url的引數,它類似post,url看不出,使用query來傳遞引數的話,類似get,url一定會被格式化為而不能自定義,以html字尾結尾checkdetail async func...