views.py 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. from account.decorators import login_required
  2. from .models import Folder
  3. from account.models import get_user
  4. from utils.decorators import debug_view
  5. from utils.http import make_json_response
  6. from utils.permission import can_delete
  7. # Create your views here.
  8. @debug_view('username', 'token')
  9. @login_required
  10. def get_root_folder(request):
  11. # 获取根目录
  12. user = get_user(request)
  13. return make_json_response(root_folder_id=user.get_root_folder().folder_id)
  14. # 在根目录下列出所有文件夹与文件
  15. @debug_view('username', 'token', 'folder_id')
  16. @login_required
  17. def folder_list(request):
  18. data = request.POST
  19. user = get_user(request)
  20. folder_id = data.get('folder_id')
  21. try:
  22. folder = Folder.objects.get(folder_id=folder_id)
  23. except:
  24. return make_json_response(code=400, error='文件夹不存在')
  25. if not folder.check_permission(user=user):
  26. return make_json_response(code=404, error='没有权限')
  27. children_folders = folder.children_folders.all()
  28. children_files = folder.children_files.all()
  29. children = [*map(lambda f: {'type': 'folder', **f.to_json()}, children_folders),
  30. *map(lambda f: {'type': 'file', **f.to_json()}, children_files)]
  31. return make_json_response(children=children)
  32. # 增文件夹
  33. @debug_view('username', 'token', 'father_folder_id', 'folder_name')
  34. @login_required
  35. def add_folder(request):
  36. if request.method == 'POST':
  37. data = request.POST
  38. user = get_user(request)
  39. # folder_id_random = ''.join(random.sample(string.digits, 8))
  40. # father_folder = Folder.objects.filter(folder_id=data.get('father_folder_id')).get()
  41. father_folder_id = data.get('father_folder_id')
  42. try:
  43. father_folder = user.folders.get(folder_id=father_folder_id)
  44. except:
  45. print('上级文件夹不存在')
  46. return JsonResponse({'code': 421, 'error': '上级文件夹不存在'})
  47. folder_name = data.get('folder_name')
  48. print(f'folder_name={folder_name} father_folder_id={father_folder_id}')
  49. Folder.objects.create(folder_name=folder_name, father_folder=father_folder, owner=user)
  50. return JsonResponse({'code': 200})
  51. elif request.method == 'GET' and DEBUG:
  52. return render(request, 'add_folder.html')
  53. else:
  54. return HttpResponse(status=400)
  55. user = get_user(request)
  56. data = request.POST
  57. father_folder_id = data.get('father_folder_id')
  58. folder_name = data.get('folder_name')
  59. try:
  60. father_folder = Folder.objects.get(folder_id=father_folder_id)
  61. except:
  62. return make_json_response(code=402, error='上级文件夹不存在')
  63. if not father_folder.check_permission(user=user):
  64. return make_json_response(code=404, error='没有权限')
  65. Folder.objects.create(folder_name=folder_name, father_folder=father_folder, owner=user, group=father_folder.group)
  66. return make_json_response()
  67. # 删除文件夹
  68. @debug_view('username', 'token', 'folder_id')
  69. @login_required
  70. def delete_folder(request):
  71. data = request.POST
  72. user = get_user(request)
  73. folder_id = data.get('folder_id')
  74. try:
  75. folder = Folder.objects.get(folder_id=folder_id)
  76. except:
  77. return make_json_response(code=421, error='无此文件夹')
  78. if not can_delete(user=user, f=folder):
  79. return make_json_response(code=404, error='没有删除文件的权限')
  80. folder.delete()
  81. return make_json_response()