zoukankan      html  css  js  c++  java
  • Django Rest Framework 使用summernote上传图片(一)

    summernote:

    链接:https://summernote.org/deep-dive/

    基于Bootstrap轻量级富文本框,支持直接粘贴图片,开发文档也比较全。

    基本使用请自己查阅。

    js:

    $('#editor').summernote({
    height: 250,
    1000,
    callbacks: {
    onImageUpload: function(files, editor, $editable) {
    sendFile(files);
    }
    }

    });
    function sendFile(files, editor, $editable) {
    var size = files[0].size;
    console.log(files[0]);
    if((size / 1024 / 1024) > 2) {
    alert("图片大小不能超过2M...");
    return false;
    }
    var data= new FormData();
    data.append("ajaxTaskFile", files[0]);
    $.ajax({
    data : data,
    type : "POST",
    url : “”,
    cache : false,
    contentType : false,
    processData : false,
    success: function(data) {
    $('#summernote').summernote('insertImage',data.pathname );
                },
    error:function(){
    alert("上传失败");
    }
    });
    }
    重写内置的上传图片函数。
    models:
    class TestFile(models.Model):
    objectID = models.ForeignKey(TestBug, on_delete=models.CASCADE, blank=True, null=True)
    objectType = models.CharField(verbose_name=u'对象类型', max_length=20, blank=False, default='bug')
    pathname = models.FileField(verbose_name=u'路径', upload_to='front_static/assets/image')
       addedBy = models.CharField(verbose_name=u'创建者', max_length=20, blank=False, default='')
        title = models.CharField(verbose_name=u'图片标题',   max_length=40, blank=False)
    extension = models.CharField(verbose_name=u'后缀', max_length=20, blank=False)

    class Meta:
    db_table = 't_test_file'
    Serializer:
    class TestFileSerializer(serializers.ModelSerializer):
    bug_name = ReverseRelated(source='objectID.title', many=False, read_only=True)

    class Meta:
    model = TestFile
    fields = ('id', 'objectID', 'objectType', 'pathname', 'title', 'extension', 'bug_name' , 'addedBy')

    views:
    class SaveFile(viewsets.ModelViewSet):
    authentication_classes = (CsrfExemptSessionAuthentication, BasicAuthentication)
    queryset = TestFile.objects.all()
    serializer_class = TestFileSerializer

    def create(self, request, *args, **kwargs):
    self.serializer_class = TestFileSerializer
    cn_name = request.COOKIES['cn_name']
    data = {
    "objectType": 'bug',
    "pathname": request.data['ajaxTaskFile'],
    "addedBy": urlunquote(cn_name),
    "title": 'shhs',
    "extension": 'jpg'
    }
    serial = TestFileSerializer(data=data)
    if not serial.is_valid():
    return Response(serial.data,status=status.HTTP_400_BAD_REQUEST)

    serial.save()
    return Response(serial.data)
    这样的结果只是开发环境,图片会保存到本地服务器,保存之后大致是这样的

    如果你需要在本地通过API访问,参考一下配置

    STATIC_URL = '/front_static/'

    STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "front_static"),
    )

    urlpatterns = [
    ] + static( settings.STATIC_URL, document_root='front_static/' )

    后续会上传到ftp服务器。根据不同项目不同用户创建不同目录保存。

    
    
    
    
  • 相关阅读:
    一个模式的四个基本要素
    【原】基础篇:第一篇,本节主要向大家介绍Ext的最基础的话题
    一些基本的设计模式
    沈老板位置
    977
    设计模式的原则
    hash算法的介绍 【清晰易懂】
    字符编码知识:Unicode、UTF8、ASCII、GB2312等编码之间是如何转换的?
    字符编码知识:Unicode、UTF8、ASCII、GB2312等编码之间是如何转换的?
    vbs生成域账号
  • 原文地址:https://www.cnblogs.com/qinghuaL/p/9392486.html
Copyright © 2011-2022 走看看