Webページには、頻繁に変更する必要のないデータがたくさんあります。たとえば、ホームページの変更頻度が低く、アクセス数が多い場合は、静的にすることができるため、データベースにクエリを実行してリクエストが発生するたびに返す必要がないため、サーバーの数を減らすことができます。圧力
いわゆる静的ページとは、完全なhtmlページを事前にレンダリングして静的ファイルの形式で保存し、次にブラウザーがそのページにアクセスしたときに、静的ファイルを直接返すことです。
Djangoのテンプレートレンダリング機能を使用してページレンダリングを完了することができます
1.静的ページ
Djangoプロジェクトで新しいpyファイルを作成し、ホームページをレンダリングするためのメソッドを記述します
from django.template import loader
def generate_static_index_html():
# 先获取首页模版文件
template = loader.get_template('index.html')
# 要渲染的数据(动态数据)
context = {
'categories': None,
'contents': None
}
# 得到渲染后的完整页面
page = template.render(context)
# 把渲染后的文件保存起来
with open('XXXXXXX/front_end_pc/index.html', 'w') as f:
f.write(page)
Djangoが提供するシェルを開き、pyファイルが配置されているディレクトリにcdして、ファイルを実行して静的ページを取得します。
2.crontabタイミングタスク
ページは頻繁に更新されませんが、更新が必要になるたびにプログラムを人為的に実行して新しいページをレンダリングすることはできません。時限タスクを使用して自動化できます
2.1crontabをインストールする
pip install django-crontab -i https://pypi.tuna.tsinghua.edu.cn/simple
2.2構成ファイルに登録する
Django構成ファイル(ここではdev.py)を開き、INSTALLED_APPSリストにcrontabを登録します。
INSTALLED_APPS = [
.....
'django_crontab', # 定时任务
]
3.3タイミングルールを作成する
crontabが実行されるタイミングと時間間隔は、Django構成ファイル(ここではdev.py)で設定する必要があります。新しいCRONJOBSリストを作成します
# 指定定时任务规则
CRONJOBS = [
# 写法是:(时间规则,要执行的任务,">>",日志文件位置)
# 每1分钟生成一次首页静态文件
# 分 时 日 月 周
('*/1 * * * *', 'apps.contents.crons.generate_static_index_html', '>> ' + os.path.join(BASE_DIR, 'logs/crontab.log'))
# 每月的23日12点1分0秒执行一次
# ('1 12 23 * *', 'apps.contents.crons.generate_static_index_html', '>> ' + os.path.join(BASE_DIR, 'logs/crontab.log'))
]
実行中に英語以外の文字が原因で文字の例外が発生した場合は、次の構成を追加できます
# ubuntu
CRONTAB_COMMAND_PREFIX = 'LANG_ALL=zh_cn.UTF-8'
# mac
CRONTAB_COMMAND_PREFIX = 'LANG=zh_cn.UTF-8'
3.4管理タスク
Djangoが提供するシェルを開き、次のコマンド管理タスクを実行します
# 添加定时任务
python manage.py crontab add
# 显示已激活的定时任务
python manage.py crontab show
# 移除定时任务
python manage.py crontab remove