文章详情页 您现在的位置是:网站首页>文章详情

django实现可以删除media的serve

图片丢失 jeeyshe 发表于:2019年4月16日 01:56 分类:【日常笔记 82次阅读

版权声明 本文属于本站  原创作品,文章版权归本站及作者所有,请尊重作者的创作成果,转载、引用自觉附上本文永久地址: https://www.lujianxin.com/x/art/wg51adt36w07

改写原因

  • 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写着就是舒服


文章评论区

作者名片

图片丢失
  • 作者昵称:jeeyshe
  • 原创文章:10篇
  • 转载文章:2篇
  • 加入本站:38天

站点信息

  • 运行天数:39天
  • 累计访问:5008人次
  • 今日访问:52人次
  • 原创文章:12篇
  • 转载文章:3篇
  • 微信公众号:第一时间获取更新信息