• 定时器任务django-crontab的使用【静态化高频率页面,增加用户体验】【系统的定时器,独立于项目执行】【刘新宇】


     

    页面静态化

    思考:

    • 网页的首页访问频繁,而且查询数据量大,其中还有大量的循环处理。

    问题:

    • 用户访问首页会耗费服务器大量的资源,并且响应数据的效率会大大降低。

    解决:

    • 页面静态化
     

    1. 页面静态化介绍

    1.为什么要做页面静态化

    • 减少数据库查询次数。
    • 提升页面响应效率。

    2.什么是页面静态化

    • 将动态渲染生成的页面结果保存成html文件,放到静态文件服务器中。
    • 用户直接去静态服务器,访问处理好的静态html文件。

    2. 首页页面静态化实现

    1.首页页面静态化实现步骤

    • 查询首页相关数据
    • 获取首页模板文件
    • 渲染首页html字符串
    • 将首页html字符串写入到指定目录,命名'index.html'

    2.首页页面静态化实现

    import os
    import time
    from django.conf import settings
    from django.template import loader
    from apps.contents.models import ContentCategory
    from apps.contents.utils import get_categories
    
    def generate_static_index_html():
        """
        生成静态的主页html文件
        """
        print('%s: generate_static_index_html' % time.ctime())
    
        # 获取商品频道和分类
        categories = get_categories()
    
        # 广告内容
        contents = {}
        content_categories = ContentCategory.objects.all()
        for cat in content_categories:
            contents[cat.key] = cat.content_set.filter(status=True).order_by('sequence')
    
        # 渲染模板
        context = {
            'categories': categories,
            'contents': contents
        }
    
        # 获取首页模板文件
        template = loader.get_template('index.html')
        # 渲染首页html字符串
        html_text = template.render(context)
        # 将首页html字符串写入到指定目录,命名'index.html'
        file_path = os.path.join(settings.STATICFILES_DIRS[0], 'index.html')
        with open(file_path, 'w', encoding='utf-8') as f:
            f.write(html_text)

    3. 定时任务crontab静态化首页

    重要提示:

    • 对于首页的静态化,考虑到页面的数据可能由多名运营人员维护,并且经常变动,所以将其做成定时任务,即定时执行静态化。
    • 在Django执行定时任务,可以通过 django-crontab 扩展来实现。

    1.安装 django-crontab

    $ pip install django-crontab 

    2.注册 django-crontab 应用

    INSTALLED_APPS = [         'django_crontab', # 定时任务 ] 

    3.设置定时任务

    定时时间基本格式 :  *  *  *  *  *  分 时 日 月 周    命令  M: 分钟(0-59)。每分钟用 * 或者 */1 表示 H:小时(0-23)。(0表示0点) D:天(1-31)。 m: 月(1-12)。 d: 一星期内的天(0~6,0为星期天)。 

    定时任务分为三部分定义:

    • 任务时间
    • 任务方法
    • 任务日志
    CRONJOBS = [     # 每1分钟生成一次首页静态文件     ('*/1 * * * *', 'apps.contents.crons.generate_static_index_html', '>> ' + os.path.join(BASE_DIR, 'logs/crontab.log')) ] 

    解决 crontab 中文问题

    • 在定时任务中,如果出现非英文字符,会出现字符异常错误
    CRONTAB_COMMAND_PREFIX = 'LANG_ALL=zh_cn.UTF-8' 

    4.管理定时任务

    # 添加定时任务到系统中  $ python manage.py crontab add   # 显示已激活的定时任务  $ python manage.py crontab show   # 移除定时任务  $ python manage.py crontab remove
    多思考也是一种努力,做出正确的分析和选择,因为我们的时间和精力都有限,所以把时间花在更有价值的地方。
  • 相关阅读:
    vue项目中关闭eslint
    关于ios的safari下,页面底部弹出登陆遮罩层,呼出软键盘时 问题解决
    1.wap端绑定电话号码&发送短信
    node.js的安装与配置
    2020年Web前端开发工作容易找吗?
    JS干货分享—-this指向
    2020年学习前端开发应该看哪些书?
    laravel migrate增加、修改、删除字段
    echarts饼状统计图、柱状统计图
    PHP伪静态
  • 原文地址:https://www.cnblogs.com/LiuXinyu12378/p/11332033.html
Copyright © 2020-2023  润新知