Django项目--首页静态化

0前言

在这里插入图片描述

1.使用Celery生成静态页面

在这里插入图片描述
task.py中新增任务函数generate_static_index_html(),任务函数生成静态页面。

@app.task
def generate_static_index_html():'''产生首页静态页面'''# 获取商品的种类信息types = GoodsType.objects.all()# 获取首页轮播商品信息goods_banners = IndexGoodsBanner.objects.all().order_by('index')# 获取首页促销活动信息promotion_banners = IndexPromotionBanner.objects.all().order_by('index')# 获取首页分类商品展示信息for type in types:  # GoodsType# 获取type种类首页分类商品的图片展示信息image_banners = IndexTypeGoodsBanner.objects.filter(type=type, display_type=1).order_by('index')# 获取type种类首页分类商品的文字展示信息title_banners = IndexTypeGoodsBanner.objects.filter(type=type, display_type=0).order_by('index')# 动态给type增加属性,分别保存首页分类商品的图片展示信息和文字展示信息type.image_banners = image_bannerstype.title_banners = title_banners# 组织模板上下文context = {'types': types,'goods_banners': goods_banners,'promotion_banners': promotion_banners}# 使用模板# 1.加载模板文件,返回模板对象temp = loader.get_template('static_index.html')# 2.模板渲染static_index_html = temp.render(context)# 生成首页对应静态文件save_path = os.path.join(settings.BASE_DIR, 'static/index.html')with open(save_path, 'w') as f:f.write(static_index_html)

2.配置Nginx提供静态页面

Nginx配置文件中新增配置项
在这里插入图片描述

3.管理员修改首页所需要表中的数据时,重新生成index静态页面。

在goods应用下的admin文件中,重写save_model和delete_model方法。

当管理员在后台新增或者删除首先所需数据时,自动调用save_model或者delete_model,其中调用了Celery中的任务函数generate_static_index_html(),此时任务函数生成静态页面static/index.html,当用户访问时,将静态页面推送给浏览器。

在这里插入图片描述

from django.contrib import admin
from django.core.cache import cache
from goods.models import GoodsType,IndexPromotionBanner,IndexGoodsBanner,IndexTypeGoodsBanner
# Register your models here.class BaseModelAdmin(admin.ModelAdmin):def save_model(self, request, obj, form, change):'''新增或更新表中的数据时调用'''super().save_model(request, obj, form, change)# 发出任务,让celery worker重新生成首页静态页from celery_tasks.tasks import generate_static_index_htmlgenerate_static_index_html.delay()# 清除首页的缓存数据cache.delete('index_page_data')def delete_model(self, request, obj):'''删除表中的数据时调用'''super().delete_model(request, obj)# 发出任务,让celery worker重新生成首页静态页from celery_tasks.tasks import generate_static_index_htmlgenerate_static_index_html.delay()# 清除首页的缓存数据cache.delete('index_page_data')class GoodsTypeAdmin(BaseModelAdmin):passclass IndexGoodsBannerAdmin(BaseModelAdmin):passclass IndexTypeGoodsBannerAdmin(BaseModelAdmin):passclass IndexPromotionBannerAdmin(BaseModelAdmin):passadmin.site.register(GoodsType, GoodsTypeAdmin)
admin.site.register(IndexGoodsBanner, IndexGoodsBannerAdmin)
admin.site.register(IndexTypeGoodsBanner, IndexTypeGoodsBannerAdmin)
admin.site.register(IndexPromotionBanner, IndexPromotionBannerAdmin)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言指针,申请、释放内存,线程

2019独角兽企业重金招聘Python工程师标准>>> 1:普通情况下,C语言的指针是使用虚拟地址,并非物理地址; 2:C语言mallco函数可以根据输入的值,申请一块连续的内存;free(*p&a…

Docker在Ubuntu16.04上安装

转自:http://blog.51cto.com/collen7788/2047800 1、添加Docker源 sudo apt-get update 2、增加CA证书 sudo apt-get install apt-transport-https ca-certificates 3、添加GPG Key(一种加密手段) sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:…

Django项目--静态首页的数据缓存(设置、获取、更新)

0 前言 将处理计算的结果先临时保存起来,下次使用的时候可以先直接使用,如果没有这个备份的数据,重新进行计算处理。 将缓存数据保存在内存中 (本项目中保存在redis中) cache注意事项: 1)如果…

关于腾讯算法大赛

腾讯算法大赛 本文参考于我协会前会长吴师兄的文档 腾讯社交广告高校算法大赛是面向高校大学生的算法大赛,作为腾讯核心的广告业务单元,腾讯社交广告通过对海量社交数据进行深入分析,构建多样广告场景,与8亿用户连接对话。在大数据…

NavigationView更改菜单icon和title颜色变化效果

NavigationView menu默认icon和title会随着菜单状态改变而改变,选择某个菜单后再次打开侧边菜单后会发现该菜单的icon和title会变成应用的主颜色,其他菜单项仍然为黑色。 如果想关闭系统默认的这个效果,有两种方式: 1. XML布局文件…

kangle服务器搭建java_linux下kangle虚拟主机-架设java空间的教程及心得

1. chmod x jdk-6u31-linux-i586-rpm.bin2. ./jdk-6u31-linux-i586-rpm.bin复制代码(注:如果下载的版本不同输入实际版本)2.下载插件包:1. wget http://www.kanglesoft.com/download/ent/easypanel-tomcat-lin-1.0.tar.gz2. tar xzf easypanel-tomcat-lin-1.0.tar.g…

Django项目--csrf攻击

1.案例流程图: 2.django防止csrf的方式: 1 ) Django中默认打开csrf中间件。settings.py文件中: MIDDLEWARE_CLASSES (django.contrib.sessions.middleware.SessionMiddleware,django.middleware.common.CommonMiddleware,django.middlewar…

mysql count(*),count(1)与count(column)区别

2019独角兽企业重金招聘Python工程师标准>>> count(*)对行的数目进行计算,包含NULL count(column)对特定的列的值具有的行数进行计算,不包含NULL值。 count()还有一种使用方式,count(1)这个用法和count(*)的结果是一样的。 性能问…

Flask项目--预防csrf攻击原理

1.CSRF机制原理 2.csrf成功攻击示意图 3.csrf防御

Flsak项目--图片验证码

0. 图片验证码的使用流程 2.后端接口编写 verify_code.py中编写接口代码: # coding:utf-8from . import api from ihome.utils.captcha.captcha import captcha from ihome import redis_store, constants, db from flask import current_app, jsonify, make_respo…

js异步解决方案 --- 回调函数 vs promise vs generater/yield vs async/await

javascript -- 深度解析异步解决方案 高级语言层出不穷, 然而唯 js 鹤立鸡群, 这要说道js的设计理念, js天生为异步而生, 正如布道者朴灵在 node深入浅出--(有兴趣的可以读一下, 很有意思^_^) , 异步很早就存在于操作系统的底层, 意外的是,在绝大多数高级编程语言中…

sql注入基本原理

1. 参考文献: 趣解SQL注入原理 Sql注入基本原理 2.参考书籍

centos7硬盘分区

首先在虚拟机的设置中为系统添加硬盘 使用fdisk -l /dev/sdb 查看未分区的硬盘 fdisk -l /dev/sda 这是已经分区好得 接下来我们就要对sdb进行分区: 首先使用fdisk /dev/sdb 接着输入m可以看到详细命令 进行添加分区 已经建立好4个主分区,在建立时会看到以下 删除…

从MapReduce的执行来看如何优化MaxCompute(原ODPS) SQL

摘要: SQL基础有这些操作(按照执行顺序来排列): from join(left join, right join, inner join, outer join ,semi join) where group by select sum distinct count order by 如果我们能理解mapreduce是怎么实现这些SQL中的基本操…

套接字(socket)基本知识与工作原理

套接字(socket)基本知识与工作原理 一、Socket相关概念 Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。(其实就是两个程序通信用的。) SOCKET用于在两个基于TCP/IP协议的应用程序之…

python 多线程--重点知识

1.全局变量global的用法 2.多线程共享全局变量-args参数 注意args参数类型为元组,逗号不能少!

当导用模块与包的import与from的问题(模块与包的调用)

当在views.py里写impor models会不会报错呢? 1、Python里面的py文件都是每一行的代码。2、Python解释器去找一个模块的时候,只去sys.path的路径里找3、django项目启动(django项目的启动文件是manage.py)启动项目是将manage.py的路…

Python多线程--互斥锁、死锁

1、互斥锁 为解决资源抢夺问题,使用mutex Threading.Lock()创建锁,使用mutex.acquire()锁定,使用mutex.release()释放锁。 代码一: import threading import time# 定义一个全局变量 g_num 0def test1(num):global g_num# 上锁…