极墨笔记

 找回密码
 立即注册
搜索
热搜: UG 建模 discuz
查看: 766|回复: 0

[分享] Django 配置文件上传功能

[复制链接]

565

主题

731

帖子

7475

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
7475

活跃会员推广达人突出贡献优秀版主荣誉管理论坛元老

发表于 2018-11-28 22:12:23 | 显示全部楼层 |阅读模式
添加了富文本编辑器后,其实后台还是不支持文件的上传,比如文件中的图片就无法上传,下面就是配置文件上传功能的方法。
1.打开settings.py文件,在里面添加下面这段代码用于配置上传路径和访问地址:
  1. MEDIA_URL='/uploads/'
  2. MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')
复制代码
2.在“zero”app文件夹下面创建一个富文本编辑器的“upload.py”文件,文件内的填写的代码如下:
  1. from django.http import HttpResponse
  2. from django.conf import settings
  3. from django.views.decorators.csrf import csrf_exempt
  4. import os
  5. import uuid
  6. import json
  7. import datetime as dt

  8. @csrf_exempt
  9. def upload_image(request, dir_name):
  10.     ##################
  11.     #  kindeditor图片上传返回数据格式说明:
  12.     # {"error": 1, "message": "出错信息"}
  13.     # {"error": 0, "url": "图片地址"}
  14.     ##################
  15.     result = {"error": 1, "message": "上传出错"}
  16.     files = request.FILES.get("imgFile", None)
  17.     if files:
  18.         result =image_upload(files, dir_name)
  19.     return HttpResponse(json.dumps(result), content_type="application/json")

  20. #目录创建
  21. def upload_generation_dir(dir_name):
  22.     today = dt.datetime.today()
  23.     dir_name = dir_name + '/%d/%d/' %(today.year,today.month)
  24.     if not os.path.exists(settings.MEDIA_ROOT):
  25.         os.makedirs(settings.MEDIA_ROOT)
  26.     return dir_name

  27. # 图片上传
  28. def image_upload(files, dir_name):
  29.     #允许上传文件类型
  30.     allow_suffix =['jpg', 'png', 'jpeg', 'gif', 'bmp']
  31.     file_suffix = files.name.split(".")[-1]
  32.     if file_suffix not in allow_suffix:
  33.         return {"error": 1, "message": "图片格式不正确"}
  34.     relative_path_file = upload_generation_dir(dir_name)
  35.     path=os.path.join(settings.MEDIA_ROOT, relative_path_file)
  36.     if not os.path.exists(path): #如果目录不存在创建目录
  37.         os.makedirs(path)
  38.     file_name=str(uuid.uuid1())+"."+file_suffix
  39.     path_file=os.path.join(path, file_name)
  40.     file_url = settings.MEDIA_URL + relative_path_file + file_name
  41.     open(path_file, 'wb').write(files.file.read())
  42.     return {"error": 0, "url": file_url}
复制代码
3.在urls.py文件中映入引入个模块:
  1. from zero.upload import upload_image
  2. from django.views.static import serve
复制代码
并在from django.urls import path后面添加一个re_path用于匹配正则表达式
  1. from django.urls import path, re_path
复制代码
然后添加2个url地址:
re_path(r'^admin/upload/(?P<dir_name>[^/]+)$', upload_image, name='upload_image'),
re_path(r"^uploads/(?P<path>.*)$", serve, {"document_root": settings.MEDIA_ROOT, }),

上面两个是分别用于富文本编辑器文件上传和admin后台的文件上传的,这样就配置完成了。
4.Kindeditor的config文章中需配置上传路径,代码uploadJson: '/admin/upload/kindeditor',前面已经添加进去了。
5.最后在“blog”项目根目录下创建一个“uploads”文件夹用于储存上传的文件,配置完成。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|论坛版权|极墨笔记 ( 浙ICP备17036881号-1 )

GMT+8, 2019-12-8 21:21 , Processed in 0.052096 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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