在python web.py中使用百度富文本编辑器 UEditor

来源:互联网 发布:vscode c语言配置 编辑:程序博客网 时间:2024/05/15 07:50

UEditor官方没有支持python的版本,有人改了个python的django版本,但是没找到web.py的。

于是参考php版本,实现了一下web.py集成UEditor,包含了文件上传,图片上传,视频上传,图片远程抓取,涂鸦等。

可能会有一些session之类的没有处理。

Demo代码可以在https://github.com/meizhitu/100programhomework/tree/master/100-25-literal-10-todo 查看

首先改ueditor.config.js,把原来指向php的链接改成web.py的

 //图片上传配置区        ,imageUrl:"/ue_imageUp"             //图片上传提交地址        ,imagePath:""                     //图片修正地址,引用了fixedImagePath,如有特殊需求,可自行配置        //,imageFieldName:"upfile"                  //图片数据的key,若此处修改,需要在后台对应文件修改对应参数        //,compressSide:0                           //等比压缩的基准,确定maxImageSideLength参数的参照对象。0为按照最长边,1为按照宽度,2为按照高度        //,maxImageSideLength:900                   //上传图片最大允许的边长,超过会自动等比缩放,不缩放就设置一个比较大的值,更多设置在image.html中        //,savePath: [ 'upload1', 'upload2', 'upload3' ]    //图片保存在服务器端的目录, 默认为空, 此时在上传图片时会向服务器请求保存图片的目录列表,                                                            // 如果用户不希望发送请求, 则可以在这里设置与服务器端能够对应上的目录名称列表                                                            //比如: savePath: [ 'upload1', 'upload2' ]        //涂鸦图片配置区        ,scrawlUrl:"/ue_scrawlUp"           //涂鸦上传地址        ,scrawlPath:""                            //图片修正地址,同imagePath        //附件上传配置区        ,fileUrl:"/ue_fileUp"               //附件上传提交地址        ,filePath:""                   //附件修正地址,同imagePath        //,fileFieldName:"upfile"                    //附件提交的表单名,若此处修改,需要在后台对应文件修改对应参数        //远程抓取配置区        //,catchRemoteImageEnable:true               //是否开启远程图片抓取,默认开启        ,catcherUrl:"/ue_getRemoteImage"   //处理远程图片抓取的地址        ,catcherPath:""                  //图片修正地址,同imagePath        //,catchFieldName:"upfile"                   //提交到后台远程图片uri合集,若此处修改,需要在后台对应文件修改对应参数        //,separater:'ue_separate_ue'               //提交至后台的远程图片地址字符串分隔符        //,localDomain:[]                            //本地顶级域名,当开启远程图片抓取时,除此之外的所有其它域名下的图片都将被抓取到本地,默认不抓取127.0.0.1和localhost        //图片在线管理配置区        ,imageManagerUrl:"/ue_imageManager"       //图片在线管理的处理地址        ,imageManagerPath:""                                    //图片修正地址,同imagePath        //屏幕截图配置区        ,snapscreenHost: location.hostname                                 //屏幕截图的server端文件所在的网站地址或者ip,请不要加http://        ,snapscreenServerUrl: "/ue_imageUp" //屏幕截图的server端保存程序,UEditor的范例代码为“URL +"server/upload/php/snapImgUp.php"”        ,snapscreenPath: ""        ,snapscreenServerPort: location.port                                   //屏幕截图的server端端口        //,snapscreenImgAlign: ''                                //截图的图片默认的排版方式        //word转存配置区        ,wordImageUrl:"/ue_imageUp"             //word转存提交地址        ,wordImagePath:""                       //        //,wordImageFieldName:"upfile"                     //word转存表单名若此处修改,需要在后台对应文件修改对应参数        //视频上传配置区        ,getMovieUrl:"/ue_getMovie"                   //视频数据获取地址        ,videoUrl:"/ue_fileUp"               //附件上传提交地址        ,videoPath:""                   //附件修正地址,同imagePath        //,videoFieldName:"upfile"                    //附件提交的表单名,若此处修改,需要在后台对应文件修改对应参数
然后配置web.py的urls映射

urls = (    '/', 'Index',    '/ue_imageUp', Ue_ImageUp,    '/ue_fileUp', Ue_FileUp,    '/ue_scrawlUp', Ue_ScrawlUp,    '/ue_getRemoteImage', Ue_GetRemoteImage,    '/ue_getMovie', Ue_GetMovie,    '/ue_imageManager', Ue_ImageManager,)
最后实现这些web.py的class。

#coding=utf-8import base64import uuidimport urllib2import osimport webueconfig_dir = 'static/upload'ueconfig_url = '/' + ueconfig_dirdef listImage(rootDir, retlist):    for cfile in os.listdir(rootDir):        path = os.path.join(rootDir, cfile)        if os.path.isdir(path):            listImage(path, retlist)        else:            if cfile.endswith('.gif') or cfile.endswith('.png') or cfile.endswith('.jpg') or cfile.endswith('.bmp'):                retlist.append('/static/upload/' + cfile)def saveUploadFile(fileName, content):    fileName = fileName.replace('\\', '/') # replaces the windows-style slashes with linux ones.    fout = open(ueconfig_dir + '/' + fileName, 'wb') # creates the file where the uploaded file should be stored    fout.write(content) # writes the uploaded file to the newly created file.    fout.close() # closes the file, upload complete.class Ue_ImageUp:    def GET(self):        reqData = web.input()        if 'fetch' in reqData:            web.header('Content-Type', 'text/javascript')            return 'updateSavePath(["upload"]);'        web.header("Content-Type", "text/html; charset=utf-8")        return ""    def POST(self):        postData = web.input(upfile={}, pictitle="")        web.debug(postData)        fileObj = postData.upfile        picTitle = postData.pictitle        fileName = fileObj.filename        newFileName = str(uuid.uuid1()) + ".png"        saveUploadFile(newFileName, fileObj.file.read())        return "{'url':'" + ueconfig_url + '/' + newFileName + "','title':'" + picTitle + "','original':'" + fileName + "','state':'" + "SUCCESS" + "'}"class Ue_FileUp:    def GET(self):        web.header("Content-Type", "text/html; charset=utf-8")        return ""    def POST(self):        postData = web.input(upfile={})        fileObj = postData.upfile        fileName = postData.Filename        ext = '.' + fileName.split('.')[-1]        #web.py的static目录对中文文件名不支持,会404        newFileName = str(uuid.uuid1()) + ext        #fileNameFormat = postData.fileNameFormat        saveUploadFile(newFileName, fileObj.file.read())        return "{'url':'" + ueconfig_url + '/' + newFileName + "','fileType':'" + ext + "','original':'" + fileName + "','state':'" + "SUCCESS" + "'}"class Ue_ScrawlUp:    def GET(self):        web.header("Content-Type", "text/html; charset=utf-8")        return ""    def POST(self):        reqData = web.input(upfile={})        if 'action' in reqData:            if reqData.action == 'tmpImg':                #上传背景                fileObj = reqData.upfile                fileName = fileObj.filename                saveUploadFile(fileName, fileObj.file.read())                return "<script>parent.ue_callback(" + ueconfig_url + '/' + fileName + "','" + "SUCCESS" + "')</script>"        else:            base64Content = reqData.content            fileName = str(uuid.uuid1()) + '.png'            saveUploadFile(fileName, base64.decodestring(base64Content))            return "{'url':'" + ueconfig_url + '/' + fileName + "',state:'" + "SUCCESS" + "'}"class Ue_GetRemoteImage:    def GET(self):        web.header("Content-Type", "text/html; charset=utf-8")        return ""    def POST(self):        postData = web.input()        urls = postData.upfile        #urls = urls.replace('&','&')        urllist = urls.split("ue_separate_ue")        fileType = [".gif", ".png", ".jpg", ".jpeg", ".bmp"]        outlist = []        for fileurl in urllist:            if not fileurl.startswith('http'):                continue            ext = "." + fileurl.split('.')[-1]            web.debug(ext + "|" + fileurl)            if ext in fileType:                fileName = str(uuid.uuid1()) + ext                saveUploadFile(fileName, urllib2.urlopen(fileurl).read())                outlist.append(ueconfig_url + "/" + fileName)        outlist = "ue_separate_ue".join(outlist)        return "{'url':'" + outlist + "','tip':'远程图片抓取成功!','srcUrl':'" + urls + "'}"class Ue_GetMovie:    def POST(self):        reqData = web.input()        skey = reqData.searchKey        vtype = reqData.videoType        surl = 'http://api.tudou.com/v3/gw?method=item.search&appKey=myKey&format=json&kw=' + skey + '&pageNo=1&pageSize=20&channelId=' + vtype + '&inDays=7&media=v&sort=s'        htmlContent = urllib2.urlopen(surl).read()        web.debug(htmlContent)        return htmlContentclass Ue_ImageManager:    def POST(self):        reqData = web.input()        if 'action' in reqData:            if reqData.action == 'get':                retfiles = []                listImage(ueconfig_dir, retfiles)                htmlContent = "ue_separate_ue".join(retfiles)                return htmlContent




0 0
原创粉丝点击