正文共: 4850字 4图

预计阅读时间: 13分钟

每日分享

Never let success get to your head, and never let failure get to your heart.

『胜不骄,败不馁』(直译:永远不要将成功顶到你的头上,永远不要让失败放进你的心。)

小闫语录:

真正的强者不会将失败放在心上,从此一蹶不振;同样,也不会将一时的成功永远顶在头顶,活在以往。胜败乃兵家常事,顺其自然,不要过分的放大成功与失败本身,它们与普通的事件一样,只是因为我们对待的态度才变得那么强大或者可怕。

美多商城项目(六)

1.提醒接口文档是后端写完接口之后给前端使用的,一定要写的尽可能详细。

学过的内容要经常回顾,代码要经常敲,要不然会『相望不相识』

序列化器相当于为我们封装了一些常用的功能,减少我们的工作,超重要,一定要经常回顾,重点掌握。

2.docker

1.交互式容器只要exit退出后,就停止了。如果是想要在后台长期运行,那么可以创建守护式容器,不会随着exit退出而停止。

2.交互式容器创建完会自动进入,但是守护式容器创建完之后不会自动进入,需要手动添加命令:docker exec -it myubuntu2 /bin/bash

2.1容器操作命令总结

1.创建一个交互式容器docker run -i --name=<容器名> <镜像名> <容器启动之后执行命令>

2.创建守护式容器docker run -itd --name=<容器名> <镜像名>

3.进入已经运行容器docker exec -it <容器名|容器id> <进入容器执行命令>

4.查看本地正在运行的容器docker container ls

5.查看本地所有的容器(包括已经停掉的容器)docker container ls -all

6.停止正在运行的容器docker container stop|kill <容器名|容器id>

7.启动已经停止的容器docker container start <容器名|容器id>

8.删除已有的容器docker container rm <容器名|容器id>

2.2打包

将所有的应用和依赖环境装好之后,可以开发我们的项目,完成之后打包好就可以给别人使用了。

1.先将这个容器变成镜像docker commit 容器名 镜像名

docker commit myubuntu2 ubuntu_with_mysql

2.将镜像打包成文件docker save -o 保存的文件名 镜像名

docker save -o mysql.tar ubuntu_with_mysql

3.其他Linux电脑装好docker后可以加载文件到本地镜像,然后就可以使用了。docker load -i 文件路径

docker load -i mysql.tar

3.自定义文件存储

默认情况下,使用admin管理站点上传图片时,Django会调用默认文件存储系统类中的 _save方法进行文件的保存,并将 _save的返回值保存在对应表中的image字段中。

FileSystemStorage是Django的默认文件存储类,该类中的 _save方法会将文件保存在MEDIA_ROOT指定的目录下方。这个目录是在服务器的本地,我们是想将其保存到FDFS中,因此我们需要自定义文件存储。

3.1步骤

1.自定义文件存储类。Storage_save

_save():需要写代码将客户端上传文件上传到FDFS系统

2.修改Django默认文件存储类的配置项:DEFAULTFIFLSTORAGE

4.CKEditor富文本编辑器

问:什么是富文本?

答:带有格式的文本。

5.网站性能优化-页面静态化

获取首页数据:

1.获取商品分类API

2.获取首页广告API

每个用户访问首页时都会查两次数据库。

假如1分钟之内有1000个用户访问了网站的首页,1分钟之内就需要查询2000次数据库,但是假如1分钟之内,数据库中商品分类和首页广告数据并没有发生变化,其实这2000次数据库查询和2次数据库查询获取的结果最终是一致的。那么就需要考虑网站性能的优化了。

5.1概念

对于经常被用户访问的页面,可以将页面用到的数据从数据库中查询之后,利用查询到的数据生成一个静态页面,当用户来访问页面时,直接返回生成的静态页面,而不再去查询数据库,这样就能减少数据库的查询,从而提升网站的性能。只有被访问频繁的页面才需要进行优化。

5.2页面静态化步骤

1.准备一个对应页面的模板文件,在模板文件中使用模板语言定义所需填充的数据以及数据怎么进行展示。

2.定义一个函数,调用这个函数来生成对应的静态页面。

2.1从数据库中获取模板文件所需的数据。

2.2调用模板文件进行模板渲染,给模板文件传递数据,将模板文件的变量进行替换,获取替换之后的html的内容。

2.3将渲染之后的html内容保存成一个静态文件。

5.2.1代码实现def generate_static_index_html():

"""生成首页静态页面index.html"""

# 1.从数据库中查询出首页所需的商品分类和首页广告。

...

# 2.调用index.html模板文件,进行渲染,给模板文件传递数据,进行模板变量替换,获取替换之后页面内容。

context = {

'categories':categories,

'contents':contents

}

# 2.1加载模板:指定使用模板文件

from django.template import loader

temp = loader.get_template('index.html')

# 2.2模板渲染:获取替换之后html页面内容

res_html = temp.render(context)

# 3.将替换之后的内容保存成一个静态页面。

save_path = '保存文件路径'

with open(save_path,'w') as f:

f.write(res_html)

5.3静态化页面更新

使用场景:保持静态页面的数据和数据库表数据同步

数据表数据变化时再更新:对于数据更新不频繁的页面,什么时候页面所用的数据表的数据发生变化时,再调用静态页面函数,重新生成对应静态页面。

定时任务:Linux系统中的功能。对于页面数据更新比较频繁的页面,可以将生成静态页面的函数添加到操作系统的定时任务中,让操作系统每隔一段时间自动调用生成静态页面的函数,来实现静态页面的更新。

在Django执行定时任务,可以通过扩展 django-crontab来实现.

5.3.1安装pip install django-crontab

5.3.2添加应用INSTALLED_APPS = [

...

'django_crontab', # 定时任务

...

]

5.3.3设置任务的定时时间

在配置文件中设置定时执行的时间

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

任务时间基本格式 :

* * * * *

分 时 日 月 周 命令

M: 分钟(0-59)。每分钟用*或者 */1表示

H:小时(0-23)。(0表示0点)

D:天(1-31)。

m: 月(1-12)。

d: 一星期内的天(0~6,0为星期天)。

任务方法

任务日志

首页的定时任务设置如下# 定时任务

CRONJOBS = [

# 每5分钟执行一次生成主页静态文件

('*/5 * * * *', 'contents.crons.generate_static_index_html', '>> /Users/smart/Desktop/meiduo_mall/logs/crontab.log')

]

5.3.4开启定时任务

添加定时任务到系统中python manage.py crontab add

显示已经激活的定时任务python manage.py crontab show

移除定时任务python manage.py crontab remove

5.3.5解决中文字符问题

在定时任务中,如果出现非英文字符,会报出字符异常错误。

可以通过在配置文件中添加定时任务执行的附加命令来实现。# 解决crontab中文问题

CRONTAB_COMMAND_PREFIX = 'LANG_ALL=zh_cn.UTF-8'定时任务还可以用在定时删除日志的时候,可以编写代码实现。

5.4商品详情页静态化操作

对于网站中每个商品,都生成它对应的静态页面,当用户来访问那个商品的时候,就返回那个商品的静态详情页面。

5.4.1详情静态页面更新

当详情页所使用的数据表的数据发生变化时,再重新生成对应商品的静态详情页面。

5.4.2需求

管理员在admin站点修改完数据,点击『保存』按钮的时候:

1.将更新数据保存到数据表中。

2.重新生成对应商品静态详情页面。(Django没有提供)

5.4.3详情静态页面生成函数

将详情静态页面生成函数封装成celery任务函数。管理员在admin站点修改完指定商品详情点击『保存』按钮的时候,只是发出一个任务即可。

Admin管理员通过admin站点修改指定商品数据之后,处理完数据保存,还要将指定商品的静态详情页面重新生成。

5.4.4代码实现def generate_static_sku_detail_html(sku_id):

"""生成指定商品的静态详情页面"""

# 1.从数据库中查询详情页所需数据

...

# 2.使用模板文件detail.html,进行模板渲染,获取渲染之后的html内容

context = {

'categories':categories,

'goods':goods,

'specs':specs,

'sku':sku

}

# 2.1加载模板:指定使用的模板文件获取一个模板对象

from django.template import loader

temp = loader.get_template('detail.html')

# 2.2模板渲染

res_html = temp.render(context)

# 3.将渲染之后的html内容保存成一个静态页面

save_path = os.path.join(settings.GENERATED_STATIC_HTML_FILES_DIR,'goods/%s.html' % sku_id)

with open(save_path,'w') as f:

f.write(res_html)

6.Django Admin站点保存数据的处理流程

当管理员通过Admin站点维护某个数据表的数据时,保存时,该数据表模型类对应 Admin管理类中的两个方法会被调用:

1. save_model:数据修改或新增时调用。

2. delete_model:数据删除时调用。

7.批量生成商品静态页面

商品详情页面比较多,我们在上线之前又必须全部生成,因此我们可以编写脚本文件,一次性生成所有的商品详情页面。

编写一个脚本文件。#!/usr/bin/env python

"""

功能:手动生成所有SKU的静态detail html文件

使用方法:

./脚本文件名.py

"""

import sys

sys.path.insert(0, '../')

# 设置Django运行所依赖的环境变量

import os

if not os.getenv('DJANGO_SETTINGS_MODULE'):

os.environ['DJANGO_SETTINGS_MODULE'] = 'meiduo_mall.settings.dev'

# 让Django进行一次初始化

import django

django.setup()

# 生成静态商品详情页面代码

...

if __name__ == '__main__':

skus = SKU.objects.all()

for sku in skus:

print(sku.id)

generate_static_sku_detail_html(sku.id)首行需要填写执行此文件的编译器,我们选择环境中的python执行此文件。

优质文章推荐:

python美多商城项目百度网盘_美多商城项目(六)相关推荐

  1. python美多商城项目百度网盘_美多商城项目(七)

    正文共: 7620字 4图 预计阅读时间: 20分钟 每日分享 If you can change your mind, you can change your life. 如果你愿意改变你的想法,你 ...

  2. python微信开发实例 pdf 百度网盘_用python看女神微信里的百度云资源有啥?

    最近小编一直苦心研究,怎么给大家发放更多的资料和资源链接.大家都知道,百度云的分享链接是很容易被和谐的,群里除了分享链接外,就是各种抱怨 "怎么又失效了","又和谐了.. ...

  3. python登陆百度网盘_百度网盘命令行版本bypy

    表白:黑白圣堂血天使,天剑鬼刀阿修罗. 讲解对象:/百度网盘命令行版本bypy作者:融水公子 rsgz百度网盘教程 http://www.rsgz.top/post/399.html为了大家可以在co ...

  4. python百度网盘_百度网盘突然大调整,网友炸了..

    点击上方 "数据科学杂谈"关注公众号和我一起提升 然后点击右上角三个点,设为"星标",即使获取更多知识 来源:不正经程序员 转自:不正经程序员 近日,百度网盘在 ...

  5. python进阶训练营百度网盘_(在线观看)【完结】私域流量实战训练营(百度网盘分享下载)...

    今日推荐(在线观看)[完结]私域流量实战训练营(百度网盘分享下载)对  (在线观看)[完结]私域流量实战训练营(百度网盘分享下载)感兴趣的朋友可以学习参考 (有需要的找我,你就可以拥有这个课程)需要此 ...

  6. 赤裸裸的统计学:除去大数据的枯燥外衣,呈现真实的数字之美 - 电子书下载 -(百度网盘 高清版PDF格式)...

    赤裸裸的统计学:除去大数据的枯燥外衣,呈现真实的数字之美-[美]查尔斯·韦兰 在线阅读                   百度网盘下载(bkgy) 书名:赤裸裸的统计学:除去大数据的枯燥外衣,呈现真 ...

  7. python爬虫之爬取百度网盘

    爬虫之爬取百度网盘(python) #coding: utf8 """ author:haoning create time: 2015-8-15 "" ...

  8. python 数据分析 百度网盘_[百度网盘]利用Python进行数据分析(Python For Data Analysis中文版).pdf - Jan-My31的博客 - 磁力点点...

    利用Python进行数据分析(Python For Data Analysis中文版).pdf - Jan-My31的博客 2018-5-27 · 链接:https://pan.baidu.com/s ...

  9. 数据科学家访谈录 百度网盘_您应该在数据科学访谈中向THEM提问。

    数据科学家访谈录 百度网盘 A quick search on Medium with the keywords "Data Science Interview" resulted ...

最新文章

  1. java mvc view_对Springmvc view层的理解
  2. ArcGIS放射状流向地图
  3. ecmall开发记录(三)
  4. linux脚本开机自动执行脚本文件,如何让linux开机自动执行sata里头的脚本文件
  5. QT的QVarLengthArray类的使用
  6. python3 打印_Python 3 进阶 —— print 打印和输出
  7. 贺利坚老师汇编课程34笔记:SI和DI复制字符串
  8. 更改mysql数据库存储引擎_MySQL更改数据库表的存储引擎
  9. lodop打印控件——前端学习笔记
  10. B2B2C商城系统源码 多商户商城源码 Wap+App+小程序源码
  11. 用计算机数字技术制作的电影是,计算机数字技术为电影带来的空前发展.doc
  12. xcopy 跳过已经存在的_虚拟网红卖真衣服,真实人类已经开始买“假”衣服了!...
  13. matlab 坐标点标记符号表
  14. 写在20110918:Eclipse中的outline标识以及常用快捷键
  15. socket接口调用 java_Java中socket接口调用(示例代码)
  16. sqli-lbs:Less-5~10通关详解
  17. ChatGPT所代表的人工智能的意义
  18. Java程序设计基础【10】
  19. Nodejs之解决接口跨域问题
  20. Android 消息队列

热门文章

  1. CentOS下使用Varnish为网站加速
  2. nginx-一个端口代理多个服务
  3. Linux中如何删除一个大文件
  4. php mysql多表关联删除_MySQL中多表删除方法
  5. Python基础:内置异常(未完待续)
  6. -bash : ** : command not found的问题解决(图文详解)
  7. 解决问题:swiper动态加载图片后无法滑动
  8. 我可以获得标记为--assume-unchanged的文件列表吗?
  9. 遍历Java中的列表的方法
  10. 删除Chrome自动完成功能的输入背景色?