【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.pswp.cn/news/455966.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455966.shtml
英文地址,請注明出處:http://en.pswp.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"包名"…