- A+
所属分类:Django学习
接上篇Django后台增加kindeditor富媒体编辑器的内容,已经可以在后台发布内容的时候选用富媒体的编辑编辑,但是遗憾的是,上面的图片、视频、文件均无法上传的。
那么下面的内容就是为了处理上面的需求。
配置setting.py中MEDIA_URL和MEDIA_ROOT
MEDIA_ROOT:主要是为了存放上传的文件。
MEDIA_URL:URL的映射,前后要加上‘/’ 表示从根目录开始。
- MEDIA_URL = '/uploads/'
- MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')
配置项目的urls.py
- 先引入文件
- from django.conf import settings
- 增加url内容
- url(r"^uploads/(?P<path>.*)$", \
- "django.views.static.serve", \
- {"document_root": settings.MEDIA_ROOT, }),
上述的内容在django1.10以下是可以运行的,但是在1.10以上报错。报错内容如下:
TypeError: view must be a callable or a list/tuple in the case of include().
所以要修改上述的内容为
- # 先引入view对象
- from django.views import static
- # 增加url配置文件
- url(r"^uploads/(?P<path>.*)$", static.serve, {"document_root": settings.MEDIA_ROOT},),
在APP中创建uploads.py文件,并配置项目urls.py
- uploads.py文件中内容
- from django.http import HttpResponse
- from django.conf import settings
- from django.views.decorators.csrf import csrf_exempt
- import os
- import uuid
- import json
- import datetime as dt
- @csrf_exempt
- def upload_image(request, dir_name):
- ##################
- # kindeditor图片上传返回数据格式说明:
- # {"error": 1, "message": "出错信息"}
- # {"error": 0, "url": "图片地址"}
- ##################
- result = {"error": 1, "message": "上传出错"}
- files = request.FILES.get("imgFile", None)
- if files:
- result = image_upload(files, dir_name)
- return HttpResponse(json.dumps(result), content_type="application/json")
- # 目录创建
- def upload_generation_dir(dir_name):
- today = dt.datetime.today()
- dir_name = dir_name + '/%d/%d/' % (today.year, today.month)
- if not os.path.exists(settings.MEDIA_ROOT + dir_name):
- os.makedirs(settings.MEDIA_ROOT + dir_name)
- return dir_name
- # 图片上传
- def image_upload(files, dir_name):
- # 允许上传文件类型
- allow_suffix = ['jpg', 'png', 'jpeg', 'gif', 'bmp']
- file_suffix = files.name.split(".")[-1]
- if file_suffix not in allow_suffix:
- return {"error": 1, "message": "图片格式不正确"}
- relative_path_file = upload_generation_dir(dir_name)
- path = os.path.join(settings.MEDIA_ROOT, relative_path_file)
- if not os.path.exists(path): # 如果目录不存在创建目录
- os.makedirs(path)
- file_name = str(uuid.uuid1()) + "." + file_suffix
- path_file = os.path.join(path, file_name)
- file_url = settings.MEDIA_URL + relative_path_file + file_name
- open(path_file, 'wb').write(files.file.read())
- return {"error": 0, "url": file_url}
在内容测试后,发现编辑中,所有的上传的标签中都使用了imgFile这个标签,所以后面直接更新了允许上传的文件类型即可完成,所有指定格式的内容上传,当然是否会存在危险,这个暂时无法分析,先解决当下问题,有时间的同学可以看下参考阅读里面的一些验证方法。
更新后的代码为:
- allow_suffix = ['jpg', 'png', 'jpeg', 'gif', 'bmp', 'zip', "swf", "flv", "mp3", "wav", "wma", "wmv", "mid", "avi", "mpg", "asf", "rm", "rmvb", "doc", "docx", "xls", "xlsx", "ppt", "htm", "html", "txt", "zip", "rar", "gz" , "bz2" ]
上述的内容为常用的文件格式,图片格式不正确文字内容可修改为上传文件格式不正确
- 增加url中的配置内容
在urls.py文件中导入uploads中的方法
- from blog.uploads import upload_image
配置url上传规则
- url(r'^admin/upload/(?P<dir_name>[^/]+)$', upload_image, name='upload_image'),
在kindeditor编辑器配置文件中,增加上传路径
- KindEditor.ready(function (K) {
- K.create('textarea', {
- // 个性化定制内容,更多内容参考官方文档
- width: '800px',
- height: '500px',
- uploadJson: '/admin/upload/kindeditor', //新增了这一行
- });
- });
上传成功
上传更多内容,请参考:http://blog.csdn.net/xiaoqi030611a/article/details/8308808(python2的内容,注意分辨)