【Django】文件上传以及celery的使用

上传文件、异步、初始化脚本

 面试题:
项目中的静态文件处理(JS/CSS/image)	自己在机房内优化的方法:1. Nginx/lighttpd(lighty-douban):Nginx 处理静态资源速度非常快,并且自身还带有缓存。2. 80: Nginx -> {server config} -> django:8080  -> Static : folders	 -> 云存储你了解CDN吗?能讲讲原理么?扩展:如何更换CDN上的图片?改名大法1. 请求加参数:1. abc.jpg2. abc.jpg?20191011111042asdflj23. abc.jpg?201910111110432. 改名1. abc_201910111042.jpg2. abc_md5.jpg

七牛云接入

  1. 注册七牛云账号
  2. 创建存储空间:Bucket -> 有独立的域名,可以访问
  3. 获取相关配置
    • AccessKey:从个人中心-密钥管理里获得
    • SecretKey:从个人中心-密钥管理里获得
    • Bucket_name:我们自己新建的存储空间的名字
    • Bucket_URL:建好的新存储空间的访问url
  4. 安装 qiniu SDK:pip install qiniu
  5. 根据接口文档进行接口封装
  6. 按照需要将上传、下载接口封装成异步任务
  7. 程序处理流程
    1. 服务端上传方式
      1. 用户图片先上传到我们的服务器上
      2. 然后,我们的程序再调用七牛云的api,将图片上传到七牛云
      3. 上传成功后,拼接 avatar 的图片 url 地址:
        1. 七牛云的Bucket_URL/filename,将 avatar 的图片 url 存入数据库
    2. 客户端直传
      1. 客户端图片直接上传到云服务
      2. 客户端将图片地址告诉服务端,服务端更新数据库
      3. 其实存在一个安全隐患
        1. 客户端先从服务端获取token,再上传

代码示例 使用了celery

#上传图片
def user_avatar(request):#1.存下来# 定义上传后保存的文件名file_name =f'avatar-{request.user.id}.jpg'# 上传后保存的路径file_path = f'{settings.BASE_DIR}/static/{file_name}'#接收上传文件内容f = request.FILES['avatar']with open(file_path,'wb+') as destination:for chunk in f.chunks():destination.write(chunk)print('save local ok.')user_id = request.user.id#delay很重要!!!upload_qiniu.delay(file_name, file_path, user_id)return  render_json('已经放入celery-redis队列中')#这一步用异步celery
@celery_app.task
def upload_qiniu(file_name, file_path, user_id):# 2.调用七牛云sdk上传# 需要填写你的 Access Key 和 Secret Key 需要修改 access_key = 'KXfx2ZiBP311HkZZ8l8JHCmqlqPTJCK2sraihexx'secret_key = 'pe5svTTUAJQoUPhppsf0Gg9wbEJiYahnRMAy1rxx'# 要上传的空间bucket_name = 'liu'# 要上传的域名bucket_domain = ' liu.s3-cn-south-1.qiniucs.com'# 构建鉴权对象q = Auth(access_key, secret_key, )token = q.upload_token(bucket_name, file_name, 3600)ret, info = put_file(token, file_name, file_path)print(info)#断言assert ret['key'] == file_nameassert ret['hash'] == etag(file_path)print('save qiniu ok.')avatar_url = f'{bucket_domain}/{file_name}'# 3.更新用户的avataruser = User.objects.get(id=user_id)# user = request.user # request 无法传 所以改为user_iduser.avatar = avatar_urluser.save()return  True

异步任务

Celery 及异步任务的处理

  1. 通用的异步框架的原理

    1. 核心队列:消息队列

    2. 客户端:异步端

    3. 生产者:消费者

    4. 发布者:订阅者

    5. 发送者:接收者

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YFOxnBJs-1577967577874)(/Users/zebin/Pictures/markdown_assets/image-20200102152154116.png)]

    • 任务模块 Task:包含异步任务和定时任务. 其中, 异步任务通常在业务逻辑中被触发并发往任务队列, 而定时任务由 Celery Beat 进程周期性地将任务发往任务队列.

    • 消息中间件 Broker:代理Broker, 即为任务调度队列, 接收任务生产者发来的消息(即任务)更重要的智能是把海量的的消息缓冲住, 将任务存入队列。Celery 本身不提供队列服务, 官方推荐使用 RabbitMQ 和 Redis 等,或者干脆用云服务的消息队列服务:SQS

    • 任务执行单元 Worker:Worker 是执行任务的处理单元, 它实时监控消息队列, 获取队列中调度的任务, 并执行它.

    • 任务结果存储 Backend:Backend 用于存储任务的执行结果, 以供查询. 同消息中间件一样, 存储也可使用 RabbitMQ, Redis 和 MongoDB 等.

  2. 消息队列:

    1. MQ:Message Queue,(与服务器、存储、缓存、数据库同等重要,是现代互联网后台架构的基础组件)
    2. 作用:
      1. 异步:把没必要同步执行的程序,用消息队列暂存,然后用其他程序去异步执行,做到跨机器分散任务
      2. 解耦:有依赖关系的应用之间,用消息队列解除耦合
        1. A 和 B 两个业务有强耦合
        2. A B
      3. 削峰:把互联网的高峰请求,先缓冲下来,然后再慢慢的逐个处理
        1. 秒杀、团购的场景,用这种方式降低峰值请求
      4. 限流:
        1. 1000,每进来一个人 -1,每离开一个人 +1,
        2. 减到 0 ,就告诉后来者:人满了。
    3. 常见的消息队列:
      1. Redis,最简单
      2. Kafka,最适合做日志处理,单机几十万并发(每秒钟的请求)
      3. RabbitMQ,符合 MQ 标准的消息队列(每秒钟几万)
      4. RocketMQ,符合 MQ 标准的消息队列(每秒钟十几万)
  3. 安装 注意win10不支持celery4.3!!!!!!!!!!
    所以需要额外安装在这里插入图片描述

    pip install  celery[redis] 
    
  4. 创建实例

    import os
    from celery import Celeryfrom social import settings
    from worker import configos.environ.setdefault("DJANGO_SETTINGS_MODULE", "social.settings")celery_app = Celery('social')
    celery_app.config_from_object(config)
    celery_app.autodiscover_tasks()
  5. 常规配置

    broker_url = 'redis://127.0.0.1:6379/0'
    broker_pool_limit = 1000  # Borker 连接池, 默认是10timezone = 'Asia/Shanghai'
    accept_content = ['pickle', 'json']task_serializer = 'pickle'
    result_expires = 3600  # 任务过期时间result_backend = 'redis://127.0.0.1:6379/1'
    result_serializer = 'pickle'
    result_cache_max = 10000  # 任务结果最大缓存数量worker_redirect_stdouts_level = 'INFO'
    
  6. 启动 Worker

Linux / mac下:
celery worker -A worker --loglevel=info

win:
celery worker -A worker --loglevel=info -P eventlet

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

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

相关文章

Android 查看每个应用的最大可用内存

http://blog.csdn.net/vshuang/article/details/39647167 Android 内存管理 &Memory Leak & OOM 分析 单个应用可用的最大内存 Android设备出厂以后,java虚拟机对单个应用的最大内存分配就确定下来了,超出这个值就会OOM。这个属性值是定义在…

分析一段H264视频数据

分析一段H264视频数据 Posted on 2007-05-31 09:42 vcommon 阅读(1968) 评论(8) 编辑 收藏 引用 分析 00 00 00 01 67 42 00 1E 99 A0 B1 31 00 00 00 01 H264的数据流分为两种,一种是NAL UNIT stream(RTP),一种是 bits stream, 两者可以互相转换。我们分析的这个…

SVN在vs2013中使用

http://download.csdn.net/download/show_594/9112963 内包含VisualSVN 5.0.1的官方原版安装包及破解文件VisualSVN.Core.L.dll. 使用方法: 1、运行:VisualSVN-5.0.1.msi 进行原版的安装。 2、打开VisualSVN的安装路径。进入其子目录bin。将压缩包内的Vi…

springboot springmvc mybatis_12道重点的Spring Boot面试题,帮你整理好了!

今天跟大家分享下SpringBoot常见面试题的知识。最新2020整理收集的一些面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud等详细讲解,也有详细…

【数据分析】快速获取微博用户数据,图片,视频

功能输出实例运行环境使用说明 下载脚本安装依赖程序设置设置数据库(可选)运行脚本按需求修改脚本(可选) 如何获取user_id添加cookie与不添加cookie的区别(可选)如何获取cookie(可选&#xff09…

“云计算”越来越重要 但更重要的是“云安全”

据Gartner公司的预测,云安全服务业务继续保持强劲,2017年最终将达到59亿美元的规模,比2016年上涨了21%。 云安全服务市场的增长速度将超过整体信息安全市场。Gartner表示,电子邮件的安全性,网络安全和身份识…

HTML中Head头

HTML中Head头 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>网页标题</title> </head> <body>网页显示内容 </body> </html>HEAD标签里面负责对网页进行一些设置以及…

H.264的两个概念:DC系数和AC系数。 MV预测过程详解(附图)

在做熵编码之前&#xff0c;先明确两个概念&#xff1a;DC系数和AC系数。 量化后得到的仍是64个系数&#xff0c;量化并没有改变系数的性质。大家知到DCT变换是将数据域从时&#xff08;空&#xff09;域变换到频域&#xff0c;在频域平面上变换系数是二维频域变量u和v的函数。…

1028. List Sorting (25)

题目链接&#xff1a;http://www.patest.cn/contests/pat-a-practise/1028 题目&#xff1a; 1028. List Sorting (25) 时间限制200 ms内存限制65536 kB代码长度限制16000 B判题程序Standard作者CHEN, YueExcel can sort records according to any column. Now you are suppose…

【后端开发】分析抖音后台架构

最后分享抖音美女爬虫 https://github.com/wangshub/Douyin-Bot

看日本如何用IoT打造智能工厂

在技术、市场、政策等方面因素的推动下&#xff0c;全球正在掀起一股智能制造的热潮&#xff0c;越来越多的国家大力推进智能工厂的建设。有机构预测&#xff0c;未来五年智能工厂领域的投资将促进生产力增长27%&#xff0c;预计到2022年年底&#xff0c;21%的工厂将会成为智能…

HTML标题

HTML标题 通过 <h1>、<h2>、<h3>、<h4>、<h5>、<h6>,标签可以在网页上定义6种级别的标题。 6种级别的标题表示文档的6级目录层级关系&#xff0c;比如说&#xff1a; <h1>用作主标题&#xff08;最重要的&#xff09;&#xff0c;其…

264中 POC的计算方法

作者&#xff1a;jogh.264 参考代码 JM86 一参数说明 这一节阐述的是encoder.cfg 中的参数对编码过程的影响 要注意的是encoder.cfg 中的参数跟input 结构体中的变量是一一对应的 ? StartFrame&#xff1a;从视频流的第几帧开始编码 ? FramesToBeEncoded&#xff1a;指明…

c++ 测试串口速率_纳米软件案例之电流控制测试系统

项目背景西安某机电研究所电流控制测试系统软件需要用记录仪设置采样速率对电流数据进行采集&#xff0c;并能够进行数据实时显示、保存。为更好的分析实验现象&#xff0c;需要历史测试数据可查询并显示。目前采用的传统的手动测试&#xff0c;测试操作繁杂。数据保存困难&…

【Sublime】使用 Sublime 工具时运行python文件

使用 Sublime 工具时报Decode error - output not utf-8解决办法 在菜单中tools中第四项编译系统 内最后一项增添新的编译系统 自动新建 Python.sublime-build文件,并添加"encoding":"cp936"这一行,保存即可 使用python2 则注释encoding改为utf-8 {&quo…

智慧城市这份试卷 国外城市怎么答题?

在近五年&#xff0c;国内智慧城市建设的热潮一直增无减。据媒体梳理&#xff0c;透过各地政府工作报告和“十三五”规划发现&#xff0c;我国95%的副省级城市、76%的地级城市&#xff0c;总计超过500个城市&#xff0c;均在政府工作报告或“十三五”规划中明确提出&#xff0c…

HTML段落,换行,字符实体

HTML段落,换行,字符实体 html段落 <p>标签定义一个文本段落&#xff0c;一个段落含有默认的上下间距&#xff0c;段落之间会用这种默认间距隔开&#xff0c;代码如下&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"&g…

【python】有意思的python小项目GitHub地址汇总

Licence_plate_recognize 车牌识别 Djang-Stu 基于python的Django框架学生信息管理系统 sklearn-machine-learning 数据分析-机器学习-深度学习【个人学习笔记】 movie_analysis 对电影影评分析生成词云 spider_doubanTOP 爬取豆瓣电影top250/爬取豆瓣图书top250 yuyin_re…

CBP详解

cbp一共6bit&#xff0c;高2bit表示cbpc(2&#xff1a;cb、cr中至少一个4x4块的AC系数不全为0&#xff1b;1&#xff1a;cb、cr中至少一个2x2的DC系数不全为0&#xff1b;0&#xff1a;所有色度系数全0&#xff09; 低4bit分别表示4个8x8亮度块&#xff0c;其中从最低一位开始的…

R 包的安装,使用,更新

R包的使用方法 包就是提供了种类繁多的函数&#xff0c;当然还有它的一些数据集&#xff0c;可以使用这些函数来操作这些数据集&#xff0c;来学习使用。 library()&#xff0c;当前的工作环境里&#xff0c;可以使用的包 包的帮助文档&#xff1a;help(package"包名"…