文章详情页 您现在的位置是:网站首页>文章详情
django实现可以删除media的serve
Jeyrce.Lu 发表于:2019年4月16日 01:56 分类:【Python】 3161次阅读
改写原因
django提供了一个可以处理media文件的函数serve,但是仅限于静态文件的访问,而我们在开发时往往更希望restful风格,因此咱自己造一个符合restful风格的媒体文件接口
from django.views.static import serve url(r'^media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT}),
media文件会在我们的MEDIA_ROOT文件夹越来越多,我们想要删除又怕删错了,在此包装一下serve,让serve在接受GET请求时依然执行原来的工作,接受DELETE请求时将对应的资源从服务器和数据库移除掉
""" __author__: email@lujianxin.cn __time__: 2018-11-30 15:03 pm __popurse__: 使用装饰器实现包装django处理media文件的函数serve,让它支持从服务器和数据库删除资源"""import osfrom urllib.parse import unquotefrom django.views.static import servefrom django.http.response import JsonResponsefrom django.views.decorators.csrf import csrf_exemptfrom smaill_project import settingsdef remove_media_file(path): """移除本地文件(要先urldecode)""" full_path = os.path.join(settings.MEDIA_ROOT, unquote(path)) if os.path.exists(full_path): os.remove(full_path) return full_pathdef remove_db_recode(path): # 移除数据库记录 from .models import Img return Img.objects.filter(image=path).delete()def permission_check(request): # 这个操作很危险,因此只有超管有权 if not request.user.is_superuser: return JsonResponse({'code': -1, 'msg': 'Permission denied.'})def delete_media(serve): def wrapper(request, path, *args, **kwargs): if request.method == 'DELETE': permission_check(request) remove_media_file(path) remove_db_recode(path) return JsonResponse({'code': 0, 'msg': 'OK'}) return serve(request, path, *args, **kwargs) return wrapper@csrf_exempt@delete_mediadef support_delete_serve(request, path, **kwargs): # 通过装饰器返回一个可删除media资源的serve return serve(request, path, **kwargs)
使用方法和serve一样
在根模块配置media路由
# 此时将我们自己包装后的support_delete_serve导入url(r'^media/(?P<path>.*)$', support_delete_serve, {"document_root": MEDIA_ROOT}),
python写着就是舒服
版权声明 本文属于本站 原创作品,文章版权归本站及作者所有,请尊重作者的创作成果,转载、引用自觉附上本文永久地址: http://blog.lujianxin.com/x/art/wg51adt36w07
上一篇:域名的配置使用教程
下一篇:关于django后端渲染的笔记
猜你喜欢
文章评论区
作者名片
- 作者昵称:Jeyrce.Lu
- 原创文章:61篇
- 转载文章:3篇
- 加入本站:2059天
作者其他文章
站长推荐
友情链接
站点信息
- 运行天数:2060天
- 累计访问:164169人次
- 今日访问:0人次
- 原创文章:69篇
- 转载文章:4篇
- 微信公众号:第一时间获取更新信息