Django二次开发对接FastDFS

1.自定义文件存储器类

  1. 配置文件settings中加入如下配置

# 设置Django的文件存储类、(名字固定)
DEFAULT_FILE_STORAGE='utils.fdfs.storage.FDFSStorage'# 设置fdfs使用的client.conf文件路径(名字自己定义)
FDFS_CLIENT_CONF='./utils/fdfs/client.conf'# 设置fdfs存储服务器上nginx的IP和端口号(名字自己定义)
FDFS_URL='http://172.16.179.131:8888/'
  1. 创建utils/fdfs 目录
    在这里插入图片描述
  2. storage.py文件中自定义文件存储类

FDFSStorage继承Storage,并重写_open、_save方法

from django.core.files.storage import Storage
from django.conf import settings
from fdfs_client.client import Fdfs_clientclass FDFSStorage(Storage):'''fast dfs文件存储类'''def __init__(self, client_conf=None, base_url=None):'''初始化'''if client_conf is None:client_conf = settings.FDFS_CLIENT_CONFself.client_conf = client_confif base_url is None:base_url = settings.FDFS_URLself.base_url = base_urldef _open(self, name, mode='rb'):'''打开文件时使用'''passdef _save(self, name, content):'''保存文件时使用'''# name:你选择上传文件的名字# content:包含你上传文件内容的File对象# 创建一个Fdfs_client对象client = Fdfs_client(self.client_conf)# 上传文件到fast dfs系统中res = client.upload_by_buffer(content.read())# dict# {#     'Group name': group_name,#     'Remote file_id': remote_file_id,#     'Status': 'Upload successed.',#     'Local file name': '',#     'Uploaded size': upload_size,#     'Storage IP': storage_ip# }if res.get('Status') != 'Upload successed.':# 上传失败raise Exception('上传文件到fast dfs失败')# 获取返回的文件IDfilename = res.get('Remote file_id')return filenamedef exists(self, name):'''Django判断文件名是否可用'''return Falsedef url(self, name):'''返回访问文件的url路径'''return self.base_url+name

2.项目上传图片和使用图片流程

在这里插入图片描述

3.FastDFS结合Nginx优点

1)海量存储,存储容量扩展方便
2)文件内容重复
3)结合Nginx提高网站提供图片的效率

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

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

相关文章

微信支付 java 集成案例_Spring Boot项目中集成微信支付v3

1. 前言最近忙的一批,难得今天有喘气的机会就赶紧把最近在开发中的一些成果分享出来。前几日分享了自己写的一个微信支付V3的开发包payment-spring-boot-starter,就忙里偷闲完善了一波。期间给微信支付提交了6个BUG,跟微信支付的产品沟通了好…

单挑力扣(LeetCode)SQL题:1308. 不同性别每日分数总计

相信很多学习SQL的小伙伴都面临这样的困境,学习完书本上的SQL基础知识后,一方面想测试下自己的水平;另一方面想进一步提升,却不知道方法。 其实,对于技能型知识,我的观点一贯都是:多练习、多实…

需求与范围驾驭深刻反省总结

每天都在讲范围、说需求,真的到了想整理出点什么的时候,却一下子不知从何说起。也许是熟悉麻痹症吧。根据我的破经历,在需求方面有几个是最搞人的,只要我们方法得当,虽然不一定能够完全驾驭,但起码可以改善…

16. vim

vim编辑器是vi的升级版本,带颜色显示安装yum install -y vim-enhanced将passwd文件复制到其他目录下,vim后没有颜色 一般模式上下左右方向键或kjhl四个键移动光标n方向键 向特定方向移动n位ctrl b 或 pageup 向上翻页ctrl f 或 pagedown 向下翻页0或sh…

软件生命周期

软件生命周期由软件定义、软件开发和运行维护 ( 也称为软件维护 )3 个时期组成,每个时期又进一步划分成若干个 阶段 。

Jmeter(三)_配置元件

HTTP Cookie Manager 用来存储浏览器产生的用户信息 Clear Cookies each Iteration:每次迭代请求,清空cookies,GUI中定义的任何cookie都不会被清除。Implementation:默认HC4CookieHandlerCookie Policy:将用于管理Cook…

山寨版项目管理经验小结

不知道这个标题是否合适。 忙了互联网,再忙作软件,今天好不容易闲下来,写点最近总结的一些经验。最近在和北京几家大的软件公司的合作过程中,也许我所看到的,可能不代表全部,但是值得从事这个行业的人重视。…

Django项目--首页静态化

0前言 1.使用Celery生成静态页面 task.py中新增任务函数generate_static_index_html(),任务函数生成静态页面。 app.task def generate_static_index_html():产生首页静态页面# 获取商品的种类信息types GoodsType.objects.all()# 获取首页轮播商品信息goods_bann…

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:…

java伪协议_通过伪协议解决父页面与iframe页面通信的问题

我们经常会有父页面与iframe页面的操作,比如这个iframe里面的内容是js写的。如以下代码var iframe document.getElementById("iframe"),doc iframe.contentWindow.document;doc.open();doc.write("---------something------");doc.close();以…

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

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

关于腾讯算法大赛

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

列表推导式

#麻烦办法new_lst []for i in range(10): new_lst.append(i**2)print(new_lst)#简单办法print([i**2 for i in range(10)])# 小题下面列表中取余list_a [1,2,3,-5,20,-7]print([i%2 for i in list_a])# 30以内所有能被3整除的数print([won for won in range(30) if won%3 …

软件过程

软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。 软件过程描述为了开发出客户需要的软件,什么人(who)、在什么时候(when)、做什么事(what&#x…

【总结整理】JavaScript的DOM事件学习(慕课网)

事件:在文档或者浏览器窗口中发生的一些,特定的交互瞬间 HTML和JavaScript的交互通过事件 来实现 比如:1.滚动条向下滑动,加载图片 2.图片轮播,鼠标由2-5页调换 本章内容1、理解事件流2、使用事件处理程序3、不同的事件…

Python面试题总结(6)--数据类型(综合)

1. Python 里面如何实现 tuple 和 list 的转换? 答: Python 中的类型转换,一般通过类型强转即可完成 tuple 转 list 使用 list() 方法 list 转 tuple 使用 tuple() 方法 2. 我们知道对于列表可以使用切片操作进行部分元素的选择&#xff0c…

项目经理需要的思维批判

想做好项目经理,就一定要改变你的思维方式。这对于技术出身的朋友尤其重要。 清末人们自以为天朝,他国皆为蛮夷。结果如何呢?丧师辱国,自己沦为病夫。其根本莫非自己脑筋不对头?后来又搞洋务运动,以为洋人…

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

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