设为首页 收藏本站
查看: 2094|回复: 0

[经验分享] [原创]Python/Django使用富文本编辑器XHeditor上传本地图片

[复制链接]

尚未签到

发表于 2015-4-21 07:49:18 | 显示全部楼层 |阅读模式
前言
  为了在Django框架下使用Xheditor上传图片,居然折腾了我一个晚上。期间也遇到种种问题,网上相关资料极少。现在把经验分享给大家。

正文

xheditor篇
  1.下载http://xheditor.com/
  2.将其中的xheditor-zh-cn.min.js以及xheditor_emot、xheditor_plugins和xheditor_skin三个文件夹copy到xheditor目录下。注:如果您网站中没有使用jQuery框架,也请一并上传jquery文件夹中的jquery-1.4.4.min.js
  (上传文件域名字为:filedata
返回结构必需为json,并且结构如下:{"err":"","msg":"200906030521128703.gif"})
DSC0000.jpg
  3.在相应html文件的之前添加





  4.在您的页面初始JS代码里加上:




$(function(){
$('#txt_notes').xheditor({width:'800',height:'300',upImgUrl:"/admin/upload/",upImgExt:"jpg,jpeg,gif,png"});
})

Python&Django篇
  先看下项目的结构图
DSC0001.png
  1.settings.py配置



MIDDLEWARE_CLASSES中注释(否则出现403错误)
#'django.middleware.csrf.CsrfViewMiddleware',
import os
MEDIA_ROOT = os.path.join(os.path.dirname(__file__),"travels").replace('\\','/')
  2.urls.py 配置



url(r'^admin/upload/$','wetrip.views.upload.upload_image'),   
url(r'^static/(?P.*)$','django.views.static.serve',  
{'document_root': "/目录/static/"}),
url(r'^pictures/(?P.*)$','django.views.static.serve',  
{'document_root': "/目录/travels/pictures"}),
  3.上传主要代码



upload.py
#coding=utf-8
from django.http import HttpResponse
from django.utils import simplejson
import time,os
import datetime as dt
import wetrip.settings
#允许上传文件类型
ALLOW_SUFFIX =['.jpg','.png','.jpeg','.gif']
#目录创建
def create_dir():
today = dt.datetime.today()
dir_name = '/pictures/%d/%d/%d' %(today.year,today.month,today.day)
if not os.path.exists(wetrip.settings.MEDIA_ROOT + dir_name):
os.makedirs(wetrip.settings.MEDIA_ROOT + dir_name)
return dir_name
def upload_image(request):
dir_name = create_dir()
if 'HTTP_CONTENT_DISPOSITION' in request.META:#chrome/firefox Xheditor使用的是Html5方式上传
disposition = request.META['HTTP_CONTENT_DISPOSITION']
image_name_suffix = disposition[ disposition.rindex('.') : disposition.rindex('"') ]
data = request.body #request.raw_post_data#已过时
return write_data(data,image_name_suffix,dir_name,True)
else:#普通上传,ie
if 'filedata' in request.FILES:
image_name = request.FILES["filedata"].name
image_name_suffix = image_name[image_name.rindex('.') : ]
return write_data(request.FILES["filedata"],image_name_suffix,dir_name,False)
else:
return HttpResponse(simplejson.dumps({'err':'未选择文件','msg':''},ensure_ascii = False))
#保存图片
def write_data(data,image_name_suffix,dir_name,html5):
if image_name_suffix in ALLOW_SUFFIX:
image_name = str(int(time.time())) + image_name_suffix
try:
with open(wetrip.settings.MEDIA_ROOT + dir_name+'/'+ image_name,'wb') as destination:
if html5:
destination.write(data)#写文件流
else:
for c in data.chunks():
destination.write(c)
return HttpResponse(simplejson.dumps({'err':'','msg':dir_name+'/'+image_name},ensure_ascii = False))
except Exception,e:
return HttpResponse(simplejson.dumps({'err':e.message,'msg':''},ensure_ascii = False))
else:
return HttpResponse(simplejson.dumps({'err':'上传格式不准确!只支持jpg,png,jpeg,gif','msg':''},ensure_ascii = False))
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59000-1-1.html 上篇帖子: Python Tutorial(十):浏览标准库(一) 下篇帖子: 我看Python代码缩进
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表