相关文章推荐
沉稳的茶壶  ·  JS实现input上传图片时显示缩略图_js ...·  1 月前    · 
飘逸的鞭炮  ·  php中怎样判断base64图片上传大小-百度经验·  1 月前    · 
高大的椅子  ·  Qt在Windows下如何创建无CMD窗口控 ...·  8 月前    · 
怕老婆的沙发  ·  Xamarin.Android 微调框 - ...·  10 月前    · 
深情的山寨机  ·  CSS3 ...·  1 年前    · 
近视的大象  ·  大数据开发面试必会的SQL ...·  1 年前    · 
长情的荒野  ·  用Colab训练机器学习的经验以及踩坑的那些 ...·  1 年前    · 
Code  ›  django使用ckeditor上传图片开发者社区
django javascript ckeditor 传照片
https://cloud.tencent.com/developer/article/1579349
个性的茄子
8 月前
py3study

django使用ckeditor上传图片

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
py3study
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > django使用ckeditor上传图片

django使用ckeditor上传图片

作者头像
py3study
发布 于 2020-01-22 22:14:46
2.5K 0
发布 于 2020-01-22 22:14:46
举报
文章被收录于专栏: python3

1、在模型类中设置字段为富文本类型,这里需要注意引入的是RichTextUploadingField,以允许上传图片,需要和RichTextField区分开

代码语言: javascript
复制
from ckeditor_uploader.fields import RichTextUploadingField
class spit_model(models.Model):
    """模型类"""
    user = models.ForeignKey(User, on_delete=models.CASCADE,verbose_name='吐槽发布者')
    content = RichTextUploadingField(verbose_name='吐槽内容', max_length=200)

2、项目中ckeditor的安装及配置

代码语言: javascript
复制
pip install django-ckeditor
代码语言: javascript
复制
INSTALLED_APPS = [
  'ckeditor',  # 富文本编辑器
  'ckeditor_uploader',  # 富文本编辑器上传图片模块
]
代码语言: javascript
复制
# 富文本编辑器ckeditor配置
CKEDITOR_CONFIGS = {
    'default': {
        'toolbar': 'full',  # 工具条功能
        'height': 300,  # 编辑器高度
        'width': 300,  # 编辑器宽
}

CKEDITOR_UPLOAD_PATH = ''  # 图片ckeditor文件上传路径,这里使用七牛云存储,不填

2、html页面中加入textarea标签

代码语言: javascript
复制
<div>
<textarea  id="editor_id"></textarea>
</div>

3、页面中引入控制html页面的JS和ckeditor的JS文件, 在django的installed_app中注册应用时,会自动在虚拟环境中生成应用信息/home/python/.virtualenvs/django_1.11.16_py3/lib/python3.5/site-packages/ckeditor/static/ckeditor/ckeditor/

代码语言: javascript
复制
在js路径前加上域名,否则服务器会在live-server的默认端口下进行网络通讯,查找js
代码语言: javascript
复制
<script type="text/javascript" src="js/spit-submit.js"></script>
<script src="http://127.0.0.1:8000/static/ckeditor/ckeditor/ckeditor.js"></script> 

4、在vue变量的mounted方法中加入

代码语言: javascript
复制
let vm = new Vue({
    mounted:function () {
        CKEDITOR.replace('editor_id', { filebrowserUploadUrl:'http://127.0.0.1:8000/ckeditor/upload/' }); // 将id选择器的文本域替换成为富文本,并手动设置文件上传的请求路径,默认请求路径为live-server的路径,必须设置为服务器的域名和端口
});

5、后端设置总路由,'ckeditor_uploader.urls'中会将接收到的请求进行csrf校验免除,并限制了只有登录用户才可以上传图片,ckeditor默认应用的是django-admin的用户校验方法,django-admin的校验方法不允许跨域请求,我们需要使上传图片的类试图函数继承自django-restframework的APIVIew,

代码语言: javascript
复制
   # url(r'^ckeditor/', include('ckeditor_uploader.urls')),  # 为富文本编辑器添加总路由
    # url(r'^ckeditor/upload/', ImageUploadView.as_view()),  # 为富文本编辑器添加总路由
    # url(r'^ckeditor/upload/', csrf_exempt(ImageUploadView.as_view())),  # 为富文本编辑器添加总路由
    url(r'^ckeditor/', csrf_exempt(ImageUploadView.as_view())),  # 为富文本编辑器添加总路由

6、在应用中改写路由和类视图,使用permission_classes对请求权限进行限制

代码语言: javascript
复制
# 配置路由
urlpatterns = [
    url(r'^upload/$', ImageUploadView.as_view()),
from ckeditor_uploader import image_processing,utils
from django.conf import settings
from django.http import HttpResponse
from django.http import JsonResponse
from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView
from django.utils.html import escape
class ImageUploadView(APIView):
    permission_classes = [IsAuthenticated]
    http_method_names = ['post']
    def post(self, request, **kwargs):
        Uploads a file and send back its URL to CKEditor.
        uploaded_file = request.FILES['upload']
        backend = image_processing.get_backend()
        ck_func_num = request.GET.get('CKEditorFuncNum')
        if ck_func_num:
            ck_func_num = escape(ck_func_num)
        # Throws an error when an non-image file are uploaded.
        if not getattr(settings, 'CKEDITOR_ALLOW_NONIMAGE_FILES', True):
                backend.image_verify(uploaded_file)
            except utils.NotAnImageException:
                return HttpResponse("""
                    <script type='text/javascript'>
                    window.parent.CKEDITOR.tools.callFunction({0}, '', 'Invalid file type.');
                    </script>""".format(ck_func_num))
        saved_path = self._save_file(request, uploaded_file)
        if len(str(saved_path).split('.')) > 1:
            if(str(saved_path).split('.')[1].lower() != 'gif'):
                self._create_thumbnail_if_needed(backend, saved_path)
        url = utils.get_media_url(saved_path)
        if ck_func_num:
            # Respond with Javascript sending ckeditor upload url.
            return HttpResponse("""
            <script type='text/javascript'>
                window.parent.CKEDITOR.tools.callFunction({0}, '{1}');
 
推荐文章
沉稳的茶壶  ·  JS实现input上传图片时显示缩略图_jsfile展示缩略图
1 月前
飘逸的鞭炮  ·  php中怎样判断base64图片上传大小-百度经验
1 月前
高大的椅子  ·  Qt在Windows下如何创建无CMD窗口控制台程序-阿里云开发者社区
8 月前
怕老婆的沙发  ·  Xamarin.Android 微调框 - Xamarin | Microsoft Learn
10 月前
深情的山寨机  ·  CSS3 圆角(border-radius) - Rain Man - 博客园
1 年前
近视的大象  ·  大数据开发面试必会的SQL 30题!!!(二)-阿里云开发者社区
1 年前
长情的荒野  ·  用Colab训练机器学习的经验以及踩坑的那些事 - 掘金
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号