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...