django-ckeditor上传图片到七牛云OSS

参考信息

django-ckeditor本地图片上传功能:https://www.jianshu.com/p/882cf85b604f
django+ckeditor+七牛云,图片上传到七牛云:http://xieboke.net/article/56/

使用

1. 安装 django-ckeditor

pip install django-ckeditor

2. setting.py配置INSTALLED_APPS

django-ckeditor上传图片到七牛云OSS

3. 编写ckeditor_storage.py

import datetime
import uuid
from django.core.files.storage import Storage
from qiniu import Auth, put_data
from joyoo.settings import QINIU_ACCESS_KEY, QINIU_SECRET_KEY, QINIU_BUCKET_DOMAIN, QINIU_BUCKET_NAME

class StorageObject(Storage):
    def __init__(self):
        self.now = datetime.datetime.now()
        self.file = None

    def _new_name(self, name):
        new_name = "file/{0}/{1}.{2}".format(self.now.strftime("%Y/%m/%d"), str(uuid.uuid4()).replace('-', ''),
                                             name.split(".").pop())
        return new_name

    def _open(self, name, mode):
        return self.file

    def _save(self, name, content):
"""
        上传文件到七牛
"""
        # 构建鉴权对象
        q = Auth(QINIU_ACCESS_KEY, QINIU_SECRET_KEY)
        token = q.upload_token(QINIU_BUCKET_NAME)
        self.file = content
        file_data = content.file
        ret, info = put_data(token, self._new_name(name), file_data.read())

        if info.status_code == 200:
            base_url = 'http://%s/%s' % (QINIU_BUCKET_DOMAIN, ret.get("key"))
            # 表示上传成功, 返回文件名
            return base_url
        else:
            # 上传失败
            raise Exception("上传七牛失败")

    def exists(self, name):
        # 验证文件是否存在,因为会去生成一个新的名字存储到七牛,所以没有必要验证
        return False

    def url(self, name):
        # 上传完之后,已经返回的是全路径了
        return name

4. setting.py中设置ckeditor

图片保存路径
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR,"media")
CKEDITOR_UPLOAD_PATH = "uploads/"    # 图片ckeditor文件上传路径, 这里使用七牛云存储,不填
CKEDITOR_IMAGE_BACKEND = 'pillow'  # 注释掉就是禁止生成缩略图,传七牛云要注释掉

七牛云OSS相关配置
QINIU_ACCESS_KEY = ''
QINIU_SECRET_KEY = ''
QINIU_BUCKET_DOMAIN = ''
QINIU_BUCKET_NAME = ''

OSS配置
DEFAULT_FILE_STORAGE = 'blog.ckeditor_storage.QiniuyunStorageObject'

5. setting.py中配置功能项和样式

ckeditor配置功能项和样式
CKEDITOR_CONFIGS = {
    # django-ckeditor默认使用default配置
    'default': {
        # 编辑器宽度自适应
        'width': 'auto',
        'height': '400px',

        'update': ['Image', 'Update', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak'],
        'skin': 'moono',
        'toolbar_Basic': [
            ['Source', '-', 'Bold', 'Italic']
        ],
        # 工具栏按钮
        'toolbar_YourCustomToolbarConfig': [
            {'name': 'document', 'items': ['Source', '-', 'Save', 'NewPage', 'Preview', 'Print', '-', 'Templates']},
            {'name': 'clipboard', 'items': ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo']},
            {'name': 'editing', 'items': ['Find', 'Replace', '-', 'SelectAll']},
            {'name': 'forms',
             'items': ['Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton',
                       'HiddenField']},
            '/',
            {'name': 'basicstyles',
             'items': ['Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'RemoveFormat']},
            {'name': 'paragraph',
             'items': ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', 'CreateDiv', '-',
                       'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'BidiLtr', 'BidiRtl',
                       'Language']},
            {'name': 'links', 'items': ['Link', 'Unlink', 'Anchor']},
            {'name': 'insert',
             'items': ['Image', 'Flash', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe']},
            {'name': 'styles', 'items': ['Styles', 'Format', 'Font', 'FontSize']},
            {'name': 'colors', 'items': ['TextColor', 'BGColor']},
            {'name': 'tools', 'items': ['Maximize', 'ShowBlocks']},
            {'name': 'yourcustomtools', 'items': [
                # 自定义控件
                'Preview',
                'Maximize',
            ]},
        ],
        # 工具栏风格
        'toolbar': 'YourCustomToolbarConfig',  # put selected toolbar config here
        # tab键转换空格数
        'tabSpaces': 4,
        # 添加 Prism 相关插件
        'extraPlugins': ','.join(
            [
                # your extra plugins here
                'div',
                'autolink',
                'autoembed',
                'embedsemantic',
                'autogrow',
                # 'devtools',
                'widget',
                'lineutils',
                'clipboard',
                'dialog',
                'dialogui',
                'elementspath'
            ]),
    }
}

6. 设置model.py,使用 RichTextUploadingField 字段

django-ckeditor上传图片到七牛云OSS

7. 设置urls.py

from django.conf.urls import url,include
urlpatterns = [
    url(r'ckeditor/', include('ckeditor_uploader.urls')),
]

8. 测试

django-ckeditor上传图片到七牛云OSS

Hole yor life get everything if you never give up.

Original: https://www.cnblogs.com/1fengchen1/p/15067387.html
Author: SonnyZhang
Title: django-ckeditor上传图片到七牛云OSS

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/642827/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 手写数据库连接池

    📕数据库连接池项目 一、项目意义 在设计前先了解一下数据库连接池的作用: 除了在服务器端增加缓存服务器缓存常用的数据 之外(例如redis),还可以 增加连接池,来提高MySQL …

    技术杂谈 2023年7月25日
    092
  • solr

    目标: solr的概念 solr服务器的搭建和使用 solr中导入数据库数据 项目中怎么使用solr实现商品搜索功能 一.solr相关概念 1.1 什么是Solr? solr是一个…

    技术杂谈 2023年7月25日
    074
  • C++Protobuf

    Protobuf protobuf (protocol buffer) 是谷歌内部的混合语言数据标准。通过将结构化的数据进行序列化(串行化),用于通讯协议、数据存储等领域的语言无关…

    技术杂谈 2023年7月24日
    0131
  • 一图学Python

    网上有这样一张图片,信息量很大,通常会被配上标题”一张图让你学会Python“: 这张图流传甚广,但我没有找到明确的出处,图片上附带了 UliPad 的作者…

    技术杂谈 2023年7月25日
    0110
  • 【源码笔记】构建Spring源码环境

    IDEA构建Spring源码,不成功你来抓我 posted @2022-07-14 22:43 daheww 阅读(17 ) 评论() 编辑 Original: https://w…

    技术杂谈 2023年7月24日
    092
  • Idea运行HelloWorld与Idea自用设置

    Java运行机制 编译型compile:操作系统等需要速度的会使用编译型去做(全局翻译再运行) 解释型:网页,服务器脚本等对速度没有要求的使用解释型做(运行一句解释一句) 程序运行…

    技术杂谈 2023年6月21日
    0119
  • 网络工程师基础知识(一)

    1、 设计企业网络的基础架构是什么? 答:企业网络的基本架构由三部分组成,分别是接入层、汇聚层、核心层。 接入层:主要设备是接入交换机,用于接入企业终端设备,如PC 、AP 、IP…

    技术杂谈 2023年7月11日
    052
  • 官方文档:grep 命令

    2 Invoking grep The general synopsis of the grep command line is There can be zero or more…

    技术杂谈 2023年5月31日
    095
  • 微信小程序+微信管理后台+微信用户前台

    微信小程序+微信管理后台+微信用户前台 代码地址如下:http://www.demodashi.com/demo/15043.html 微信小程序+微信管理后台+微信用户前台 ##…

    技术杂谈 2023年5月31日
    0133
  • CoreWCF 1.0.0 发布,微软正式支持WCF

    2022年4月28日,我们达到了一个重要的里程碑,并发布了CoreWCF的1.0.0版本。对Matt Connew (微软WCF团队成员)来说,这是5年前即 2017年1月开始的漫…

    技术杂谈 2023年5月30日
    094
  • 鸟类飞行状态下穿戴式神经信号与行为数据检测记录系统的技术难点总结

    前记 近来受国内一些科研院所的委托,帮忙开发了一款鸟类可穿戴神经信号和行为数据分析设备。项目虽然成功了。可中间也遇到不少值得记录和反思的问题。 作为一家智能可穿戴方案提供商,对这方…

    技术杂谈 2023年5月31日
    0100
  • Apache服务的搭建与配置

    1. ServerRoot: 服务器的基础目录,一般来说它将包含conf/和logs/子目录,其它配置文件的相对路径即基于此目录。默认为安装目录,不需更改。 语法:ServerRo…

    技术杂谈 2023年7月10日
    074
  • Takeown–夺取文件or文件夹所有权

    强制将当前目录下的所有文件及文件夹、子文件夹下的所有者更改为管理员组(administrators)命令:takeown /f * /a /r /d y 将所有d:\documen…

    技术杂谈 2023年6月1日
    084
  • Spring Boot下的一种导出Excel文件的代码框架

    1、前言 ​ 在Spring Boot项目中,将数据导出成Excel格式文件是常见的功能。与Excel文件导入类似,此处也用代码框架式的方式实现Excel文件导出,使得代码具有可重…

    技术杂谈 2023年6月21日
    099
  • c7n 实现获取返回值后才取消button的 loading 状态

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/crazycode2/p/16441202.htmlAu…

    技术杂谈 2023年5月30日
    081
  • 阿里云网络产品 阿里云认证

    https://www.alibabacloud.com/zh/product 阿里云认证 https://edu.aliyun.com/certification?spm=517…

    技术杂谈 2023年5月31日
    097
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球