使用富文本编辑器上传的文件是要放到服务器上的,所以这是一个request。既然是一个request,就需要urls.py进行转发请求views.py进行处理。views.py处理完了返回一个文件所在的路径给富文本编辑器,富文本编辑器通过HTML来渲染文件,如果文件是图片,就显示图片。

以下以simditor富文本编辑器为例。它上传文件的api是这样的:

#upload要么为false 要么为对象
upload:{
url: '',
params: null,
fileKey: 'upload_file',
connectionCount: 3,
leaveConfirm: 'Uploading is in progress, are you sure to leave this page?'
}

需要返回的JSON格式:

{
"success": true/false,
"msg": "error message", # optional
"file_path": "[real file path]"
}

第1步:在settings.py建立MEDIA的全局变量

#settings.py
MEDIA_URL='/uploads/'
MEDIA_ROOT=os.path.join(BASE_DIR,'uploads')

第2步:配置富文本编辑器JS文件

upload:{
url:'/myadmin/upload/files', /* 注意myadmin前面的斜杠不能省掉,这是相对于根目录的*/
filekey:'upload_file', /* 相当于html标签里面的name值 */
}

第3步:配置urls.py

#urls.py
from blog.upload_proc import upload_file urlpatterns+=[
url(r'^myadmin/upload/(?P<dir_name>)',upload_file)
]

第4步:撰写upload_file处理函数

#upload_proc.py

from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.conf import settings
import json
import os
import datetime @csrf_exempt #取消csrf验证,否则会有403错误
def file_upload(request,dir_name):
files=request.FILES.get('upload_file') #得到文件对象
today=datetime.datetime.today() file_dir=settings.MEDIA_ROOT+dir_name+'/%d/%d/%d/'%(today.year,today.month,today.day)
if not os.path.exists(file_dir):
os.makedirs(file_dir)
file_path=file_dir+files.name open(file_path,'wb+').write(files.read()) #上传文件 #得到JSON格式的返回值
upload_info={"success":True,'file_path':settings.MEDIA_URL+files.name}
upload_info=json.dumps(upload_info) return HttpResponse(upload_info,content_type="application/json")

第5步:再次配置urls.py

为什么需要再次配置urls.py呢?因为文本编辑器虽然返回了已经上传的文件的地址,但是要显示在页面上,实际上又是一次request。凡是request,都需要urls.py转发给views.py进行处理。

#urls.py
from django.conf import settings #django.views.static.serve是内置的,但是只能在开发中使用,生产环境中需要交给服务器来处理,因为上传的文件已经属于静态文件了。
urlpatterns+=[
url(r'^uploads/(?P<path>.*)$',diango.views.static.serve,{'document_root':settings.MEDIA_ROOT})
]

扩展:一次性上传多个文件,如上传多张图片

  1. simditor采用的方法是利用ajax请求多次,有几个文件就请求几次。
  2. 有没有其他的方法呢?

给Django后台富文本编辑器添加上传文件的功能的更多相关文章

  1. layui 魔改:富文本编辑器添加上传视频功能

    甲方又整新需求了:富文本编辑器需要可以传视频. layui本身的富文本编辑器没有传视频的功能,所以,又到了咱们魔改的时候了. 友情提醒,富文本编辑器 layedit 只有layui的V1版有,V2版没 ...

  2. bbs项目富文本编辑器实现上传文件到media目录

    media目录是在project的settings中设置的,static目录是django自己使用的静态文件的上传目录,media目录是用户自定义上传文件的目录 # Django用户上传的文件都放在m ...

  3. Python3+Selenium3+webdriver学习笔记9(发送富文本信息及上传文件处理)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记9(发送富文本信息及上传文件处理)'''from seleni ...

  4. 关于百度Editor富文本编辑器 自定义上传位置

    因为要在网站上编辑富文本数据,所以直接采用百度的富文本编辑器,但是这个编辑器有个缺点,默认情况下,文件只能上传到网站的根目录,不能自定义路径. 而且json配置文件只能和controller.jsp在 ...

  5. Kindeditor JS 富文本编辑器图片上传指定路径

    js //================== KindEditor.ready(function (K) { var hotelid = $("#hotelid").val(); ...

  6. [原创]Python/Django使用富文本编辑器XHeditor上传本地图片

    前言 为了在Django框架下使用Xheditor上传图片,居然折腾了我一个晚上.期间也遇到种种问题,网上相关资料极少.现在把经验分享给大家. 正文 xheditor篇 1.下载http://xhed ...

  7. kindeditor富文本框,上传文件后,显示文件名称

    kindeditor作为一个应用广泛富文本框,我们经常会利用到它,然而在使用的过程中,发现有的地方使用起来很不方便,例如本文要说的,用户上传文件之后,默认只有文件URL,没有文件说明,如图: 点击确定 ...

  8. 使用django表单,使网页添加上传文件,并分析文件。

    开发环境是: apache + python + django+ eclipse(开发环境) 欲达到目的: 在网页上,添加上传文件控件.然后读取csv文件,并分析csv文件. 操作步骤: django ...

  9. 编写Java程序,实现客户端向服务端上传文件的功能

    查看本章节 查看作业目录 需求说明: 实现客户端向服务端上传文件的功能 当启动服务端后,运行客户端程序,系统提示客户在客户端输入上传文件的完整路径.当客户在客户端输入完成后,服务端实现文件上传 实现思 ...

随机推荐

  1. python walk函数

    os.walk方法 import os for i in os.walk(r'C:\Users\jack\Desktop\test\3_语文语文版七年级上册\1_一单元'): print(i[0]) ...

  2. Redis学习笔记——简介及配置

    1.Redis简介 Redis概述 Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的应用程序的完美解决方案.Redis从它的许多竞争继承来的三个主要特点:Redis数据库 ...

  3. PostgreSQL 配置远程访问

    配置远 程连接PostgreSQL数据库的步骤很简单,只需要修改data目录下的pg_hba.conf和postgresql.conf. pg_hba.conf:配置对数据库的访问权限, postgr ...

  4. BI开发之——Mdx基础语法(转至指尖流淌)

    Mdx为MultiDimensional  Expressions的缩写,多维表达式,是标准的OLAP查询语言.在多数OLAPServer都提供Mdx支持,如Microsoft Sql Server ...

  5. Android Studio 工具栏添加图标

    本文中 Android Studio 的版本为 Android Studio 2.2 ,操作系统为 Windows,如有操作不同,可能是版本差异.在工具栏中添加一些常用的图标有利于我们开发,举例说明: ...

  6. C语言若干知识点归记

    一.C语言指针学习架构 1.基本数据类型---指针 2.字符串---指针 3.数组---指针 4.函数---指针 5.结构体---指针 6.共用体---指针 7.枚举---指针 8.位域---指针 9 ...

  7. css 五角星 (转)

    1.前言 之前做的好几个项目中,都会遇到打分,评分,点赞这样的需求,写了很多次,每次需要再写的时候,就会翻出之前写过的代码,然后copy过来.总觉得这样的话没有进步,没有把知识放进脑袋里,所以,自己花 ...

  8. Tomcat6连接数设置:permsize

    Tomcat6默认配置,在后台一阵全点击服务器就报废了,查了一下就要是PERMSIZE默认值过小造成(16-64) TOMCAT_HOME/bin/catalina.sh 添加一行:JAVA_OPTS ...

  9. C++关键字之const(整理!)

     C++ Code  12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...

  10. 打印系统所有的PID

    #!/usr/bin/env python #-*- coding:utf-8 -*- ''' 打印系统所有的PID ''' import os def get_all_pid(): for pid ...