丁丁:由于篇幅有限,这里暂时只展示python后端代码,前端js代码后面上传,有需要的也可以留言私信我。

1、view.py 使用用户、部门、公司等相关账号的创建,已经个人,部门账号的冻结,删除,相关账号目录文件的创建等操作。

  1 # -*- coding: utf-8 -*-
  2 #!/usr/bin/python2.7
  3 import sys,json,hashlib,time,os,shutil,random,redis
  4 from django.forms.models import model_to_dict
  5 from django.contrib.auth.decorators import login_required
  6 from django.views.decorators.csrf import csrf_exempt
  7 from django.shortcuts import render,render_to_response,redirect,HttpResponse,HttpResponseRedirect
  8 from django.db.models import Q
  9 from project.models import UserInfo,TeamInfo,OneFile,TeamFile,CompanyFile
 10
 11 def user_auth(login_user):
 12     check_user_status = UserInfo.objects.filter(user_name=login_user)
 13     if len(check_user_status) != 0:
 14         return "auth_success"
 15     else:
 16         return "auth_failed"
 17
 18 def recv_username_redis(ran_id):
 19     r = redis.Redis(host='127.0.0.1', port=6379)
 20     user_name = r.get(ran_id)
 21     return user_name
 22
 23 @csrf_exempt
 24 def login(request):
 25     if request.method=="POST":
 26         username = request.POST.get("username")
 27         password = request.POST.get("password")
 28         try:
 29             userinfo_check = UserInfo.objects.all().get(user_name=username)
 30             if password.upper() == model_to_dict(userinfo_check)["user_passwd"]:
 31                 user_flage = model_to_dict(userinfo_check)["flage"]
 32                 if user_flage == "enable":
 33                     request.session['IS_LOGIN'] = True
 34                     user_id = random.randint(0,10000)%999
 35                     request.session['random'] = user_id
 36                     r = redis.Redis(host='127.0.0.1', port=6379)
 37                     r.set(user_id,username,ex=86400)
 38                     print(username," success")
 39                     return redirect("/index")
 40                 elif user_flage == "disable":
 41                     info = "该用户状态不可用,请联系部门管理员修改用户状态后,重新尝试登陆。"
 42                     return HttpResponse(info)
 43             else:
 44                 info = "用户名或者密码不正确,请重新输入!"
 45                 return HttpResponse(info)
 46         except UserInfo.DoesNotExist:
 47             return redirect('/login')
 48     return render_to_response("login.html")
 49
 50 def index(request):
 51     is_login = request.session.get('IS_LOGIN',False)
 52     ran_id = request.session.get('random',False)
 53     if is_login:
 54          username = recv_username_redis(ran_id)
 55          result = user_auth(username)
 56          if result == "auth_success":
 57              check_user_roles = UserInfo.objects.filter(user_name=username)
 58              for obj in check_user_roles:
 59                  user_roles = obj.user_roles
 60              if user_roles == "guest":
 61                  return render(request,"index_guest.html",{"username":username})
 62              else:
 63                  return render(request,"index.html",{"username":username})
 64          elif result == "auth_failed":
 65              return redirect('/login')
 66     else:
 67         return redirect('/login')
 68
 69 @csrf_exempt
 70 def user_info(request):
 71     is_login = request.session.get('IS_LOGIN',False)
 72     ran_id = request.session.get('random',False)
 73     login_user = recv_username_redis(ran_id)
 74
 75     if is_login:
 76         result = user_auth(login_user)
 77         if result == "auth_success":
 78             pass
 79         elif result == "auth_failed":
 80             return redirect('/login')
 81
 82         if request.method == "POST":
 83             select_type = request.POST.get("type")
 84             if select_type == "scan_one":
 85                 username = recv_username_redis(ran_id)
 86                 user_info = UserInfo.objects.filter(user_name=username)
 87                 temp_list = []
 88                 temp_dic = {}
 89                 for obj in user_info:
 90                     team_id = obj.team_id
 91                     team_info = TeamInfo.objects.filter(team_id=team_id)
 92                     temp_list = [obj.user_name,obj.user_mobile,obj.user_email,obj.user_roles,obj.flage]
 93                     user_roles = obj.user_roles
 94                     for obj_team in team_info:
 95                         team_name = obj_team.team_name
 96                     temp_list.append(team_name)
 97                 temp_dic[username] = temp_list
 98                 return HttpResponse(json.dumps(temp_dic))
 99             elif select_type == "scan_more":
100                 username = recv_username_redis(ran_id)
101                 temp_list = []
102                 temp_dic = {}
103                 temp_num = 0
104
105                 user_info = UserInfo.objects.filter(user_name=username)
106
107                 for obj in user_info:
108                     team_id = obj.team_id
109                     user_roles = obj.user_roles
110                     team_info = TeamInfo.objects.filter(team_id=team_id)
111                     for obj_team in team_info:
112                         team_name = obj_team.team_name
113
114                 if user_roles == "guest":
115                     return HttpResponse(json.dumps({"status":"failed"}))
116                 elif user_roles == "admin":
117                     user_info_team = UserInfo.objects.filter(team_id=team_id).order_by("team_id").exclude(user_roles='super_admin')
118                     for obj in user_info_team:
119                         temp_list = [obj.user_name,obj.user_mobile,obj.user_email,obj.user_roles,team_name,obj.flage]
120                         temp_dic[obj.user_name] = temp_list
121                     return HttpResponse(json.dumps(temp_dic))
122                 elif user_roles == "super_admin":
124                     user_info_team = UserInfo.objects.order_by('team_id')
125                     for obj in user_info_team:
126                         Team_name_recv = TeamInfo.objects.filter(team_id=obj.team_id)
127                         for i in Team_name_recv:
128                             Team_name = i.team_name
129                         temp_list = [obj.user_name,obj.user_mobile,obj.user_email,obj.user_roles,Team_name,obj.flage]
130                         temp_dic[obj.user_name] = temp_list
131                     return HttpResponse(json.dumps(temp_dic))
132
133             elif select_type == "delete_user":
134                 username = request.POST.get("username")
135                 username1 = recv_username_redis(ran_id)
136                 if username == username1:
137                     return HttpResponse(json.dumps("delete_comm_user"))
138                 check_login_user_roles = UserInfo.objects.filter(user_name=username1)
139                 for obj in check_login_user_roles:
140                     login_user_roles = obj.user_roles
141
142                 check_username_roles = UserInfo.objects.filter(user_name=username)
143                 for obj in check_username_roles:
144                     username_roles = obj.user_roles
145
146                 if username_roles == "super_admin":
147                     if login_user_roles != "super_admin":
148                         return HttpResponse(json.dumps("not_superadmin"))
149                 else:
150                     pass
151
152                 check_user_delete = UserInfo.objects.filter(user_name=username)
153                 check_user_delete.update(flage='disable')
154
155                 for obj in check_user_delete:
156                     user_flage = obj.flage
182                 if user_flage == "disable":
183                     return HttpResponse(json.dumps({"status":"success"}))
184                 elif user_flage == "enable":
185                     return HttpResponse(json.dumps({"status":"user_flage"}))
193
194             elif select_type == "recv_team":
195                 team_info = TeamInfo.objects.order_by("team_id")
196                 temp_dic = {}
197                 for obj in team_info:
198                     temp_dic[obj.team_id] = obj.team_name
199                 return HttpResponse(json.dumps(temp_dic))
200
201
202             elif select_type == "restore_user":
203                 user_name = request.POST.get("username")     #需要解冻的账号
204                 login_user = recv_username_redis(ran_id)     #进行解冻的账号,判断两者是否是同一个部门,或者是否是超级管理员。
206
207                 check_username_team = UserInfo.objects.filter(user_name=user_name)
208                 for obj in check_username_team:
209                     username_team_id = obj.team_id
210                     username_roles = obj.user_roles
211
212                 check_loginuser_team = UserInfo.objects.filter(user_name=login_user)
213                 for obj in check_loginuser_team:
214                     loginuser_team_id = obj.team_id
215                     loginuser_roles = obj.user_roles
216
217                 if loginuser_roles == "super_admin" or int(username_team_id) == int(loginuser_team_id):
218                     pass
219                 else:
220                     return HttpResponse(json.dumps({"status":"userteam_no_comm"}))
221
222                 check_team_flage = TeamInfo.objects.filter(team_id=username_team_id)
223                 for obj in check_team_flage:
224                     team_flage = obj.flage
225                 if team_flage == "disable":
226                     return HttpResponse(json.dumps({"status":"team_flage_disable"}))
227                 else:
228                     restore_user = UserInfo.objects.filter(user_name=user_name)
229                     restore_user.update(flage="enable")
230                     for obj in restore_user:
231                         user_flage = obj.flage
256
257                     if user_flage == "enable":
258                         return HttpResponse(json.dumps({"status":"success"}))
259                     elif user_flage == "disable":
260                         return HttpResponse(json.dumps({"status":"user_flage"}))
267             elif select_type == "add_user":
268                 username = request.POST.get("username")
269                 password = request.POST.get("password")
270                 mobile = request.POST.get("mobile")
271                 email = request.POST.get("email")
272                 roles = request.POST.get("roles")
273                 team = request.POST.get("team").split(":")[1]
274                 password_sha256 = hashlib.sha256(password.encode("utf-8")).hexdigest().upper()
275                 check_user = UserInfo.objects.filter(user_name=username)
276                 if len(check_user) == 0:
277                     temp_path_random = str(random.randint(0,10000)%999)
278                     team_path_dir = TeamInfo.objects.filter(team_id=team)
279                     for obj in team_path_dir:
280                         team_path = obj.team_path
281                         team_path_del = obj.team_path_del
284
285                     one_path = team_path+"/"+username
286                     one_path_del = team_path_del+"/"+username
287
288                     user_add = UserInfo.objects.create(user_name=username,user_passwd=password_sha256,user_mobile=mobile,user_email=email,user_roles=roles,team_id=team,flage='enable',user_path=one_path,user_path_del=one_path_del)
289                     user_add.save()
290
291                     mkdir(one_path)
292                     mkdir(one_path_del)299                     check_user = UserInfo.objects.filter(user_name=username)
300                     if len(check_user) != 0:
301                         return HttpResponse(json.dumps({"status":"success"}))
302                     else:
303                         return HttpResponse(json.dumps({"status":"add_failed"}))
304                 else:
305                     return HttpResponse(json.dumps({"status":"user_exist"}))
306             elif select_type == "change_user":
307                 username = request.POST.get("username")
308                 password = request.POST.get("password")
309                 mobile = request.POST.get("mobile")
310                 email = request.POST.get("email")
311                 roles = request.POST.get("roles")
312                 team = int(request.POST.get("team").split(":")[1])
313
314                 update_user_info = UserInfo.objects.filter(user_name=username)
315                 for obj in update_user_info:
316                     old_team = obj.team_id
317                     old_user_path = obj.user_path
318                     old_user_path_del = obj.user_path_del
319
320                 recv_new_team_path = TeamInfo.objects.filter(team_id=team)
321                 for obj in recv_new_team_path:
322                     new_team_path = obj.team_path
323                     new_team_path_del = obj.team_path_del
324
325                 if len(password) != 0:
326                     password_sha256 = hashlib.sha256(password.encode("utf-8")).hexdigest().upper()
327                     update_user_info.update(user_passwd=password_sha256)
328                 if len(mobile) != 0:
329                     update_user_info.update(user_mobile=mobile)
330                 if len(email) != 0:
331                     update_user_info.update(user_email=email)
332                 if roles != "NULL":
333                     update_user_info.update(user_roles=roles)
334                 if team != "NULL":
335                     if int(team) != int(old_team):
336                         update_user_info.update(team_id=team)
337                         update_user_info.update(user_path=new_team_path+"/"+username)
338                         update_user_info.update(user_path_del=new_team_path_del+"/"+username)
339
340             os.system("mv -f "+old_user_path+" "+new_team_path+" &")
341                         os.system("mv -f "+old_user_path_del+" "+new_team_path_del+" &")
342
343                         recv_old_onefile_path = OneFile.objects.filter(user_id=username)
344                         for obj in recv_old_onefile_path:
345                             file_id = obj.onefile_dir.split("/").pop()
346                             file_del_id = obj.onefile_del_dir.split("/").pop()
347                             recv_old_onefile_path.update(onefile_dir=new_team_path+"/"+username+"/"+file_id)
348                             recv_old_onefile_path.update(onefile_del_dir=new_team_path_del+"/"+username+"/"+file_id)
349
350                         old_all_list = []
351                         old_del_all_list = []
352                         new_all_list = []
353                         new_del_all_list = []
354                         old_teamfile_userlist = TeamFile.objects.filter(team_id=old_team)
355                         for obj in old_teamfile_userlist:
356                             old_all_list = json.loads(obj.teamfile_all_list)
357                             old_del_all_list = json.loads(obj.teamfile_del_dir_all_list)
358                             if username in old_all_list:
359                                 old_all_list.remove(username)
360                             if username in old_del_all_list:
361                                 old_del_all_list.remove(username)
362                         old_teamfile_userlist.update(teamfile_all_list=json.dumps(old_all_list))
363                         old_teamfile_userlist.update(teamfile_del_dir_all_list=json.dumps(old_del_all_list))
364
365                         new_teamfile_userlist = TeamFile.objects.filter(team_id=team)
366                         for obj in new_teamfile_userlist:
367                             new_all_list = json.loads(obj.teamfile_all_list)
368                             new_del_all_list = json.loads(obj.teamfile_del_dir_all_list)
369                             new_all_list.append(username)
370                             new_del_all_list.append(username)
371                             new_all_list = list(set(new_all_list))
372                             new_del_all_list = list(set(new_del_all_list))
373                         new_teamfile_userlist.update(teamfile_all_list=json.dumps(new_all_list))
374                         new_teamfile_userlist.update(teamfile_del_dir_all_list=json.dumps(new_del_all_list))
375
376                         change_team_id = TeamFile.objects.filter(own_user=username)
377                         change_team_id.update(team_id=team)
378                     else:
379                         pass
380                 return HttpResponse(json.dumps({"status":"success"}))
381             elif select_type == "recv_user_info":
382                 user_name = recv_username_redis(ran_id)
383                 user_info = UserInfo.objects.filter(user_name=user_name)
384                 temp_dic = {}
385                 for obj in user_info:
386                     Team_name_recv = TeamInfo.objects.filter(team_id=obj.team_id)
387                     for i in Team_name_recv:
388                         Team_name = i.team_name
389                     temp_dic["username"] = obj.user_name
390                     temp_dic["roles"] = obj.user_roles
391                     temp_dic["team"] = Team_name
392                 return HttpResponse(json.dumps(temp_dic))
393             elif select_type == "delete_session":
394                 sessionid = request.session.session_key
395                 del request.session['IS_LOGIN']
396                 is_login = request.session.get('IS_LOGIN', False)
397                 if is_login == False:
398                     r = redis.Redis(host='127.0.0.1', port=6379)
399                     r.delete(random)
400                     return HttpResponse(json.dumps("success"))
401         else:
402             return render_to_response("user_info.html")
403     else:
404         return redirect('/login')
405
406
407
408 @csrf_exempt
409 def user_manager(request):
410     is_login = request.session.get('IS_LOGIN',False)
411     ran_id = request.session.get('random',False)
412     if is_login:
413         login_user = recv_username_redis(ran_id)
414         result = user_auth(login_user)
415         if result == "auth_success":
416             pass
417         elif result == "auth_failed":
418             return redirect('/login')
419
420         if request.method == "POST":
421             pass
422         else:
423             return render_to_response("user_manager.html")
424     else:
425         return redirect('/login')
426
427 def mkdir(path):
428     path=path.strip()
429     path=path.rstrip("\\")
430     isExists=os.path.exists(path)
431     if not isExists:
432         os.makedirs(path)
433     else:
434         pass
435
436 def ftp_bak(source_path,desc_path):
437     Time = time.strftime('%Y-%m-%d',time.localtime(time.time()))
438     rename_path = source_path+"_"+Time
439     os.rename(source_path,source_path+"_"+Time)
440     os.system("mv -f "+rename_path+" "+desc_path+" &")
443
444 @csrf_exempt
445 def permiss_manager(request):
446     is_login = request.session.get('IS_LOGIN',False)
447     ran_id = request.session.get('random',False)
448     if is_login:
449         login_user = recv_username_redis(ran_id)
450         result = user_auth(login_user)
451         if result == "auth_success":
452             pass
453         elif result == "auth_failed":
454             return redirect('/login')
455
456         if request.method == "POST":
457             select_type = request.POST.get("type")
458             if select_type == "cerate_team":
459                 username = recv_username_redis(ran_id)
460                 teamname = request.POST.get("teamname")
461                 Teamname_check = TeamInfo.objects.filter(team_name=teamname)
462                 if len(Teamname_check) == 0:
463                     Time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
464
465                     temp_path_random = str(random.randint(0,10000)%999)
466                     team_path = "/opt/FTP/"+temp_path_random
467                     team_path_del = "/opt/FTP/"+temp_path_random+"_del"
468
469                     team_add = TeamInfo.objects.create(team_name=teamname,create_user=username,datatime=Time,flage="enable",team_path=team_path,team_path_del=team_path_del)
470                     team_add.save()
471
472                     mkdir(team_path)
473                     mkdir(team_path_del)
474                     os.makedirs(team_path+"/items")
475                     os.makedirs(team_path_del+"/items")
476                     Teamname_add_check = TeamInfo.objects.filter(team_name=teamname)

492                     if len(Teamname_add_check) != 0:
493                         return HttpResponse(json.dumps({"status":"success"}))
494                     else:
495                         return HttpResponse(json.dumps({"status":"team_add_failed"}))
496                 else:
497                     return HttpResponse(json.dumps({"status":"team_exist"}))
498             elif select_type == "recv_team_info":
500                 username = recv_username_redis(ran_id)
501                 user_info = UserInfo.objects.filter(user_name=username)
502                 temp_dic = {}
503                 for obj in user_info:
504                     Team_name_recv = TeamInfo.objects.filter(team_id=obj.team_id)
505                     for i in Team_name_recv:
506                         Team_name = i.team_name
507                     temp_dic["username"] = obj.user_name
508                     temp_dic["roles"] = obj.user_roles
509                     temp_dic["team"] = Team_name
510
511                 if temp_dic["roles"] == "admin":
512                     team_info = TeamInfo.objects.filter(team_name=temp_dic["team"])
513                     team_info_dic = {}
514                     for obj in team_info:
515                         team_info_dic[obj.team_id] = [obj.team_name,obj.create_user,obj.datatime,obj.flage]
516                     temp_dic["team_info"]=team_info_dic
517                 elif temp_dic["roles"] == "super_admin":
518                     team_info_dic = {}
519                     team_info = TeamInfo.objects.order_by("team_id")
520                     for obj in team_info:
521                          team_info_dic[obj.team_id] = [obj.team_name,obj.create_user,obj.datatime,obj.flage]
522                     temp_dic["team_info"]=team_info_dic
523
524                 return HttpResponse(json.dumps(temp_dic))
525
526             elif select_type == "delete_team":
527                 team_name = request.POST.get("team_name")
528                 username = recv_username_redis(ran_id)
529
530                 user_info = UserInfo.objects.filter(user_name=username)
531                 for obj in user_info:
532                     username_roles = obj.user_roles
533
534                 if username_roles != "super_admin":
535                     return HttpResponse(json.dumps({"status":"no delete"}))
536
537                 check_team = TeamInfo.objects.filter(team_name=team_name)
538
539                 for obj in check_team:
540                     team_id = obj.team_id
541
542                 check_team.update(flage='disable')
543                 for obj in check_team:
544                     flage = obj.flage
553
554                 check_User = UserInfo.objects.filter(team_id=team_id)
555                 if len(check_User) != 0:
556                     check_User.update(flage="disable")
557                     for obj in check_User:
558                         User_flage = obj.flage
559                         User_name = obj.user_name
568                 else:
569                     User_flage = "disable"
571
572                 if flage == "disable" and User_flage == "disable":
573                     return HttpResponse(json.dumps({"status":"success"}))
574                 elif flage == "enable":
575                     return HttpResponse(json.dumps({"status":"flage"}))
576                 elif User_flage == "enable":
577                     return HttpResponse(json.dumps({"status":"User_flage"}))
582             elif select_type == "restore_team" :
583                 team_name = request.POST.get("team_name")
584                 username = recv_username_redis(ran_id)
585                 check_username_team = UserInfo.objects.filter(user_name=username)
586                 for obj in check_username_team:
587                     login_user_team_id = obj.team_id
588                     login_user_roles = obj.user_roles
589
590                 restore_team = TeamInfo.objects.filter(team_name=team_name)
593
594                 if login_user_roles == "super_admin":
595                     restore_team.update(flage='enable')
596                 else:
597                     return HttpResponse(json.dumps({"status":"dont restore"}))
600                 for obj in restore_team:
601                     team_id = obj.team_id
602                     flage = obj.flage

612                 if flage == "enable":
613                     return HttpResponse(json.dumps({"status":"success"}))
614                 elif flage == "disable":
615                     return HttpResponse(json.dumps({"status":"flage"}))
618
619         else:
620             return render_to_response("permiss_manager.html")
621     else:
622         return redirect('/login')

2、ftp.py 实现个人文件、部门文件、公司文件的上传,下载,删除,和文件的对外共享,已经共享码的生成。

  1 # -*- coding: utf-8 -*-
  2 #!/usr/bin/python2.7
  3 import sys,json,random,os,time,redis,hashlib
  4 from django.forms.models import model_to_dict
  5 from django.contrib.auth.decorators import login_required
  6 from django.views.decorators.csrf import csrf_exempt
  7 from django.shortcuts import render,render_to_response,redirect,HttpResponse
  8 from django.http import StreamingHttpResponse
  9 from django.http import FileResponse
 10 from django.db.models import Q
 11 from project.models import UserInfo,TeamInfo,OneFile,TeamFile,CompanyFile
 12
 13 def user_auth(login_user):
 14     check_user_status = UserInfo.objects.filter(user_name=login_user)
 15     if len(check_user_status) != 0:
 16         return "auth_success"
 17     else:
 18         return "auth_failed"
 19
 20 def recv_username_redis(ran_id):
 21     r = redis.Redis(host='127.0.0.1', port=6379)
 22     user_name = r.get(ran_id)
 23     return user_name
 24
 25 #创建目录在这里进行
 26 @csrf_exempt
 27 def ftp(request):
 28     is_login = request.session.get('IS_LOGIN',False)
 29     ran_id = request.session.get('random',False)
 30     if is_login:
 31         login_user = recv_username_redis(ran_id)
 32         result = user_auth(login_user)
 33         if result == "auth_success":
 34             pass
 35         elif result == "auth_failed":
 36             return redirect('/login')
 37
 38         if request.method == "POST":
 39             username = recv_username_redis(ran_id)
 40             select_type = request.POST.get("type")
 41             if select_type == "recv_username_filelist":     #获取个人相关的文件信息,涉及个人、部门、公司
 42                 recv_team_id = UserInfo.objects.filter(user_name=username)
 43                 for obj in recv_team_id:
 44                     team_id = obj.team_id
 45
 46                 recv_one_file = OneFile.objects.filter(user_id=username).order_by("-lasttime")
 47                 recv_team_file = TeamFile.objects.filter(team_id=team_id).order_by("-lasttime")
 48                 recv_company_file = CompanyFile.objects.order_by("own_user").order_by("-lasttime")
 49                 temp_num1 = 0
 50                 temp_dic1 = {}
 51                 Data = {}
 52                 for obj in recv_one_file:
 53                     if os.path.exists(obj.onefile_dir):
 54                         temp_dic1[temp_num1] = [obj.onefile_name,obj.file_size,obj.datatime,obj.lasttime,obj.user_id,obj.flage,obj.onefile_share,obj.onefile_dir]
 55                         temp_num1 += 1
 56                     else:
 57                         pass
 58                 Data["recv_one_file"] = temp_dic1
 59
 60                 temp_num2 = 0
 61                 temp_dic2 = {}
 62                 for obj in recv_team_file:
 63                     if os.path.exists(obj.teamfile_dir):
 64                         temp_dic2[temp_num2] = [obj.teamfile_name,obj.file_size,obj.datatime,obj.lasttime,obj.own_user,obj.flage,obj.teamfile_dir]
 65                         temp_num2 += 1
 66                     else:
 67                         pass
 68                 Data["recv_team_file"] = temp_dic2
 69
 70                 temp_num3 = 0
 71                 temp_dic3 = {}
 72                 for obj in recv_company_file:
 73                     if os.path.exists(obj.companyfile_dir):
 74                         temp_dic3[temp_num3] = [obj.companyfile_name,obj.file_size,obj.datatime,obj.lasttime,obj.own_user,obj.flage,obj.companyfile_dir]
 75                         temp_num3 += 1
 76                     else:
 77                         pass
 78                 Data["recv_company_file"] = temp_dic3
 79                 return HttpResponse(json.dumps(Data))
 80             elif select_type == "recv_recycle_filelist":
 81                 #后期如果需要添加彻底删除模块,则将对应文件的状态修改为disable,这里的文件显示则只显示状态为enable的就可以,默认文件保存在数据库中不删除,同时定期备份的话只需要将FTP和del_FTP两个目录整体打包备份即可。
 82                 recv_team_id = UserInfo.objects.filter(user_name=username)
 83                 for obj in recv_team_id:
 84                     team_id = obj.team_id
 85                 recv_one_file = OneFile.objects.filter(user_id=username).order_by("-lasttime")
 86                 recv_team_file = TeamFile.objects.filter(team_id=team_id).order_by("-lasttime")
 87                 recv_company_file = CompanyFile.objects.order_by("own_user").order_by("-lasttime")
 88                 temp_num = 0
 89                 temp_dic = {}
 90                 Data = {}
 91                 for obj in recv_one_file:
 92                     if os.path.exists(obj.onefile_del_dir):
 93                         temp_dic[temp_num] = [obj.onefile_name,obj.file_size,obj.datatime,obj.lasttime,obj.user_id,obj.flage,obj.onefile_del_dir]
 94                         temp_num += 1
 95                     else:
 96                         pass
 97                 for obj in recv_team_file:
 98                     if os.path.exists(obj.teamfile_del_dir):
 99                         temp_dic[temp_num] = [obj.teamfile_name,obj.file_size,obj.datatime,obj.lasttime,obj.own_user,obj.flage,obj.teamfile_del_dir]
100                         temp_num += 1
101                     else:
102                         pass
103                 for obj in recv_company_file:
104                     if os.path.exists(obj.companyfile_del_dir):
105                         temp_dic[temp_num] = [obj.companyfile_name,obj.file_size,obj.datatime,obj.lasttime,obj.own_user,obj.flage,obj.companyfile_del_dir]
106                         temp_num += 1
107                     else:
108                         pass
109                 return HttpResponse(json.dumps(temp_dic))
110             elif select_type == "recv_share_list_info":   #获取共享文件列表信息
111                 Data = {}
112                 recv_share_flage = OneFile.objects.filter(user_id=username)
113                 r = redis.Redis(host='127.0.0.1', port=6379)
114                 for obj in recv_share_flage:
115                     temp_dic = {}
116                     if len(obj.onefile_share) != 0:
117                         temp_dic["file_name"] = obj.onefile_name
118                         temp_dic["file_path"] = obj.onefile_dir
119                         temp_dic["file_size"] = obj.file_size
120                         get_key = json.loads(r.get(obj.onefile_share))
121                         temp_dic["get_url"] = "http://192.168.12.11/get_auth?"+obj.onefile_share
122                         temp_dic["get_random"] = get_key["random"]
123                         TTL = r.ttl(obj.onefile_share)/3600/24
124                         temp_dic["get_ttl"] = TTL
125                         Data[obj.onefile_dir] = temp_dic
126                     else:
127                         pass
128                 if len(Data) == 0:
129                     return HttpResponse(json.dumps("failed"))
130                 else:
131                     return HttpResponse(json.dumps(Data))
132             elif select_type == "select_one_file":    #文件查找
133                 file_name = request.POST.get("file_name")
134                 recv_one_file = OneFile.objects.filter(Q(onefile_name__icontains=file_name,user_id=username))
135                 temp_dic = {}
136                 temp_num = 0
137                 for obj in recv_one_file:
138                     if os.path.exists(obj.onefile_dir):
139                         temp_dic[temp_num] = [obj.onefile_name,obj.file_size,obj.datatime,obj.lasttime,obj.user_id,obj.flage,obj.onefile_share,obj.onefile_dir]
140                         temp_num += 1
141                     else:
142                         pass
143                 if len(temp_dic) == 0:
144                     return HttpResponse(json.dumps("failed"))
145                 else:
146                     return HttpResponse(json.dumps(temp_dic))
147             elif select_type == "select_team_file":  #部门文件查找
148                 file_name = request.POST.get("file_name")
149                 recv_team_id = UserInfo.objects.filter(user_name=username)
150                 for obj in recv_team_id:
151                     team_id = obj.team_id
152
153                 recv_team_file = TeamFile.objects.filter(Q(teamfile_name__icontains=file_name,team_id=team_id))
154                 temp_dic = {}
155                 temp_num = 0
156                 for obj in recv_team_file:
157                     if os.path.exists(obj.teamfile_dir):
158                         temp_dic[temp_num] = [obj.teamfile_name,obj.file_size,obj.datatime,obj.lasttime,obj.own_user,obj.flage,obj.teamfile_dir]
159                         temp_num += 1
160                     else:
161                         pass
162                 if len(temp_dic) == 0:
163                     return HttpResponse(json.dumps("failed"))
164                 else:
165                     return HttpResponse(json.dumps(temp_dic))
166         else:
167             return render_to_response("ftp.html")
168     else:
169         return redirect('/login')
170
171 #文件对应码,使用随机生成,和文件明对应。
172 def generate_verification_code():
173     ''' 随机生成6位的验证码 '''
174     code_list = []
175     for i in range(10): # 0-9数字
176         code_list.append(str(i))
177     for i in range(65, 91): # A-Z
178         code_list.append(chr(i))
179     for i in range(97, 123): # a-z
180         code_list.append(chr(i))
181
182     myslice = random.sample(code_list, 6)  # 从list中随机获取6个元素,作为一个片断返回
183     verification_code = ''.join(myslice) # list to string
184     return verification_code
185
186 #共享文件,生成共享码保存到redis,展示到前端
187 @csrf_exempt
188 def share_one_file(request):
189     is_login = request.session.get('IS_LOGIN',False)
190     ran_id = request.session.get('random',False)
191     if is_login:
192         login_user = recv_username_redis(ran_id)
193         result = user_auth(login_user)
194         if result == "auth_success":
195             pass
196         elif result == "auth_failed":
197             return redirect('/login')
198
199         if request.method == "POST":
200 #            share_url = request.POST.get("url")
201             select_type = request.POST.get("type")
202             if select_type == "share_one_file":   #共享一个文件
203                 file_name = request.POST.get("file_name")
204                 share_path = request.POST.get("share_path")
205                 Random6 = generate_verification_code()
206
207                 get_file_path = OneFile.objects.filter(onefile_name=file_name,onefile_dir=share_path)
208                 for obj in get_file_path:
209                     file_path = obj.onefile_dir
210
211                 get_team_id = UserInfo.objects.filter(user_name=login_user)
212                 for obj in get_team_id:
213                     team_id = obj.team_id
214
215                 r = redis.Redis(host='127.0.0.1', port=6379)
217                 share_url = "http://192.168.12.11:8080/get_auth?file_name="+file_name+"&type=auth_get"
218                 Data = json.dumps({"url":share_url,"random":Random6,"user":login_user})
219
220                 file_path_join = file_path+"_"+login_user
221                 set_result = r.set(hashlib.sha256(file_path_join.encode("utf-8")).hexdigest(),Data,ex=864000,nx=True)
222                 if set_result:
223                     get_info = {"url":"http://192.168.12.11:8080/get_auth?"+hashlib.sha256(file_path_join.encode("utf-8")).hexdigest(),"random":Random6}
224                     recv_data = json.dumps({"status":"success","info":get_info,"ttl":10})     #10天
225                     get_file_path.update(onefile_share=hashlib.sha256(file_path_join.encode("utf-8")).hexdigest())
226                 else:
227                     Random = json.loads(r.get(hashlib.sha256(file_path_join.encode("utf-8")).hexdigest()))["random"]
228                     get_info = {"url":"http://192.168.12.11:8080/get_auth?"+hashlib.sha256(file_path_join.encode("utf-8")).hexdigest(),"random":Random}
229                     TTL = r.ttl(hashlib.sha256(file_path_join.encode("utf-8")).hexdigest())/3600/24
230                     recv_data = json.dumps({"status":"exist","info":get_info,"ttl":TTL})      #TTL转换成天
231
232                 return HttpResponse(recv_data)
233             elif select_type == "del_share_one_file":    #取消一个文件共享
234                 file_name = request.POST.get("file_name")
235                 file_path = request.POST.get("file_path")
236                 get_file_path = OneFile.objects.filter(onefile_name=file_name,onefile_dir=file_path)
237                 for obj in get_file_path:
238                     file_share = obj.onefile_share
239                 get_file_path.update(onefile_share="")
240                 r = redis.Redis(host='127.0.0.1', port=6379)
241                 r.delete(file_share)
242                 get_share = r.get(file_share)
243                 if get_share != None:
244                     return HttpResponse(json.dumps({"status":"failed"}))
245                 else:
246                     return HttpResponse(json.dumps({"status":"success"}))
247             elif select_type == "del_one_file":          #删除一个文件
248                 file_name = request.POST.get("file_name")
249                 file_path = request.POST.get("file_path")
250                 recv_file_path = OneFile.objects.filter(onefile_name=file_name,onefile_dir=file_path)
251                 for obj in recv_file_path:
252                     source_path = obj.onefile_dir
253                     desc_path = obj.onefile_del_dir
254                     share_flage = obj.onefile_share
255                 if len(share_flage) != 0:
256                     return HttpResponse(json.dumps({"status":"share"}))
257                 else:
258                     os.system("mv "+source_path+" "+desc_path)
259                     if os.path.exists(source_path):
260                         return HttpResponse(json.dumps({"status":"failed"}))
261                     else:
262                         return HttpResponse(json.dumps({"status":"success"}))
263             elif select_type == "del_team_file":   #删除一个部门文件
264                 file_name = request.POST.get("file_name")
265                 file_path = request.POST.get("file_path").split(":")[0]
266                 recv_file_path = TeamFile.objects.filter(teamfile_name=file_name,teamfile_dir=file_path)
267                 for obj in recv_file_path:
268                     source_path = obj.teamfile_dir
269                     desc_path = obj.teamfile_del_dir
270                     file_user = obj.own_user
271                 if login_user != file_user:
272                     return HttpResponse(json.dumps({"status":"user_err"}))
273                 else:
274                     os.system("mv "+source_path+" "+desc_path)
275                     if os.path.exists(source_path):
276                         return HttpResponse(json.dumps({"status":"failed"}))
277                     else:
278                         return HttpResponse(json.dumps({"status":"success"}))
279             elif select_type == "Restoring_files":   #还原一个被删除的文件
280                 file_name = request.POST.get("file_name")
281                 restor_path = request.POST.get("restor_path")    #回收站中的地址
282                 desc_path = ("").join(restor_path.split("_del"))  #需要还原回去的地址
283                 status = os.system("mv "+restor_path+" "+desc_path)
284                 if os.path.exists(desc_path):
285                     return HttpResponse(json.dumps({"status":"success"}))
286                 else:
287                     return HttpResponse(json.dumps({"status":"failed"}))
288
289         else:
290             return render_to_response("share_file.html")
291     else:
292         return redirect('/login')
293
294
295 #个人文件上传
296 @csrf_exempt
297 def file_put_one(request):
298     is_login = request.session.get('IS_LOGIN',False)
299     ran_id = request.session.get('random',False)
300     if is_login:
301         login_user = recv_username_redis(ran_id)
302         result = user_auth(login_user)
303         if result == "auth_success":
304             pass
305         elif result == "auth_failed":
306             return redirect('/login')
307
308         if request.method == "POST":
309             username = recv_username_redis(ran_id)
310             Data = request.FILES.get("one_navigation_bar_put")
311
312             if Data:
313                 one_file_random = str(random.randint(0,10000)%999)   #用户默认上传文件的名称,和上传文件的真实名称做关联
314                 one_file_path = UserInfo.objects.filter(user_name=username)
315                 for obj in one_file_path:
316                     one_dir_path = obj.user_path
317                     one_del_dir_path = obj.user_path_del
318
319                 save_file_name = one_dir_path+"/"+one_file_random
320                 save_del_file_name = one_del_dir_path+"/"+one_file_random
321                 #save_file_name = "/opt/Django/auto_ops/111"
322                 file_name = Data.name
323                 file_size = Data.size
324
325                 check_file_exist_sql = OneFile.objects.filter(onefile_name=file_name,user_id=username)
326                 for obj in check_file_exist_sql:
327                     if os.path.exists(obj.onefile_dir):
328                         return HttpResponse("file_exist")
329                     else:
330                         pass
331 #                if len(check_file_exist_sql) != 0:
332 #                    return HttpResponse("file_exist")
333 #                else:
334 #                    pass
335
336                 with open(save_file_name,"wb") as new_file:
337                     for chunk in Data.chunks():
338                         new_file.write(chunk)
339                 new_file.close()
340
341                 if os.path.exists(save_file_name):
342                     if os.path.isfile(save_file_name):
343                         file_type = "file"
344                     elif os.path.isdir(save_file_name):
345                         file_type = "dir"
346
347                     check_file_size = os.path.getsize(save_file_name)
348                     Time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
349                     if int(check_file_size) == int(file_size):
350                         file_size = file_size/float(1024*1024)
351                         file_size = str(round(file_size,2))+"MB"
352
353                         save_file = OneFile.objects.create(user_id=username,onefile_dir=save_file_name,onefile_dir_all_list=json.dumps([username]),onefile_name=file_name,onefile_del_dir=save_del_file_name,onefile_del_dir_all_list=json.dumps([username]),onefile_del_name=file_name,datatime=Time,lasttime=Time,file_type=file_type,flage='enable',file_size=file_size)
354                         save_file.save()
355                         check_save_file = OneFile.objects.filter(onefile_name=file_name)
356                         if len(check_save_file) == 0:
357                             return HttpResponse("save_sql_failed")
358                         else:
359                             return HttpResponse("success")
360                     else:
361                         return HttpResponse("put_failed")          #上传失败,大小不一致
362
363                 else:
364                     return HttpResponse("Put_NULL")   #上传失败,没检测到文件
365
366             else:
367                 return HttpResponse("Data_NULL")      #检测ajax的数据包是否有数据
368
369         else:
370             return render_to_response("ftp.html")
371     else:
372         return redirect('/login')
373
374 #部门文件上传
375 @csrf_exempt
376 def file_put_team(request):
377     is_login = request.session.get('IS_LOGIN',False)
378     ran_id = request.session.get('random',False)
379     if is_login:
380         login_user = recv_username_redis(ran_id)
381         result = user_auth(login_user)
382         if result == "auth_success":
383             pass
384         elif result == "auth_failed":
385             return redirect('/login')
386
387         if request.method == "POST":
388             username = recv_username_redis(ran_id)
389             Data = request.FILES.get("team_navigation_bar_put")
390
391             if Data:
392                 team_file_random = str(random.randint(0,10000)%999)   #用户默认上传文件的名称,和上传文件的真实名称做关联
393                 team_id_recv = UserInfo.objects.filter(user_name=username)
394                 for obj in team_id_recv:
395                     team_id = obj.team_id
396
397                 team_file_path = TeamInfo.objects.filter(team_id=team_id)
398                 for obj in team_file_path:
399                     team_dir_path = obj.team_path
400                     team_del_dir_path = obj.team_path_del
401
402                 save_file_name = team_dir_path+"/items/"+team_file_random
403                 save_del_file_name = team_del_dir_path+"/items/"+team_file_random
404                 file_name = Data.name
405                 file_size = Data.size
406
407                 check_file_exist_sql = TeamFile.objects.filter(teamfile_name=file_name)
408                 for obj in check_file_exist_sql:
409                     if os.path.exists(obj.teamfile_dir):
410                         return HttpResponse("file_exist")
411                     else:
412                         pass
413 #                if len(check_file_exist_sql) != 0:
414 #                    return HttpResponse("file_exist")
415 #                else:
416 #                    pass
417
418                 with open(save_file_name,"wb") as new_file:
419                     for chunk in Data.chunks():
420                         new_file.write(chunk)
421                 new_file.close()
422
423                 if os.path.exists(save_file_name):
424                     if os.path.isfile(save_file_name):
425                         file_type = "file"
426                     elif os.path.isdir(save_file_name):
427                         file_type = "dir"
428
429                     check_file_size = os.path.getsize(save_file_name)
430                     Time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
431                     if int(check_file_size) == int(file_size):
432                         file_size = file_size/float(1024*1024)
433                         file_size = str(round(file_size,2))+"MB"
434
435                         team_user_list = UserInfo.objects.filter(team_id=team_id)
436                         user_list = []
437                         for obj in team_user_list:
438                             user_list.append(obj.user_name)
439
440                         save_file = TeamFile.objects.create(team_id=team_id,own_user=username,teamfile_dir=save_file_name,teamfile_all_list=json.dumps(user_list),teamfile_name=file_name,teamfile_del_dir=save_del_file_name,teamfile_del_dir_all_list=json.dumps(user_list),teamfile_del_name=file_name,datatime=Time,lasttime=Time,file_type=file_type,flage='enable',file_size=file_size)
441                         save_file.save()
442                         check_save_file = TeamFile.objects.filter(teamfile_name=file_name)
443                         if len(check_save_file) == 0:
444                             return HttpResponse("save_sql_failed")
445                         else:
446                             return HttpResponse("success")
447                     else:
448                         return HttpResponse("put_failed")          #上传失败,大小不一致
449                 else:
450                     return HttpResponse("Put_NULL")   #上传失败,没检测到文件
451             else:
452                 return HttpResponse("Data_NULL")      #检测ajax的数据包是否有数据
453         else:
454             return render_to_response("ftp.html")
455     else:
456         return redirect('/login')
457
458 #公司文件上传
459 @csrf_exempt
460 def file_put_company(request):
461     is_login = request.session.get('IS_LOGIN',False)
462     ran_id = request.session.get('random',False)
463     if is_login:
464         login_user = recv_username_redis(ran_id)
465         result = user_auth(login_user)
466         if result == "auth_success":
467             pass
468         elif result == "auth_failed":
469             return redirect('/login')
470
471         if request.method == "POST":
472             username = recv_username_redis(ran_id)
473             Data = request.FILES.get("company_navigation_bar_put")
474
475             if Data:
476                 team_file_random = str(random.randint(0,10000)%999)   #用户默认上传文件的名称,和上传文件的真实名称做关联
477
478                 save_file_name = "/opt/FTP/company/"+team_file_random
479                 save_del_file_name = "/opt/FTP_BAK/company/"+team_file_random
480                 file_name = Data.name
481                 file_size = Data.size
482
483                 check_file_exist_sql = CompanyFile.objects.filter(companyfile_name=file_name)
484                 for obj in check_file_exist_sql:
485                     if os.path.exists(obj.companyfile_dir):
486                         return HttpResponse("file_exist")
487                     else:
488                         pass
489 #                if len(check_file_exist_sql) != 0:
490 #                    return HttpResponse("file_exist")
491 #                else:
492 #                    pass
493
494                 with open(save_file_name,"wb") as new_file:
495                     for chunk in Data.chunks():
496                         new_file.write(chunk)
497                 new_file.close()
498
499                 if os.path.exists(save_file_name):
500                     if os.path.isfile(save_file_name):
501                         file_type = "file"
502                     elif os.path.isdir(save_file_name):
503                         file_type = "dir"
504
505                     check_file_size = os.path.getsize(save_file_name)
506                     Time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
507                     if int(check_file_size) == int(file_size):
508                         file_size = file_size/float(1024*1024)
509                         file_size = str(round(file_size,2))+"MB"
510
511                         user_list = []
512                         save_file = CompanyFile.objects.create(own_user=username,companyfile_dir=save_file_name,companyfile_all_list=json.dumps(user_list),companyfile_name=file_name,companyfile_del_dir=save_del_file_name,companyfile_del_dir_all_list=json.dumps(user_list),companyfile_del_name=file_name,datatime=Time,lasttime=Time,file_type=file_type,flage='enable',file_size=file_size)
513                         save_file.save()
514                         check_save_file = CompanyFile.objects.filter(companyfile_name=file_name)
515                         if len(check_save_file) == 0:
516                             return HttpResponse("save_sql_failed")
517                         else:
518                             return HttpResponse("success")
519                     else:
520                         return HttpResponse("put_failed")          #上传失败,大小不一致
521
522                 else:
523                     return HttpResponse("Put_NULL")   #上传失败,没检测到文件
524
525             else:
526                 return HttpResponse("Data_NULL")      #检测ajax的数据包是否有数据
527
528         else:
529             return render_to_response("ftp.html")
530     else:
531         return redirect('/login')
532
533 #个人文件下载
534 def file_get_one(request):
535     is_login = request.session.get('IS_LOGIN',False)
536     ran_id = request.session.get('random',False)
537     get_type = request.GET.get("type")
538
539     if is_login and get_type == "get":
540         login_user = recv_username_redis(ran_id)
541         result = user_auth(login_user)
542         if result == "auth_success":
543             pass
544         elif result == "auth_failed":
545             return redirect('/login')
546
547         username = recv_username_redis(ran_id)
548         file_name = request.GET.get("file_name")
549
550         get_file_path = OneFile.objects.filter(onefile_name=file_name)
551         for obj in get_file_path:
552             file_path = obj.onefile_dir
553         file=open(file_path,'rb')
554         response =FileResponse(file)
555         response['Content-Type']='application/octet-stream'
556         response['Content-Disposition']='attachment;filename="'+file_name.encode("utf-8")+'"'
557         return response
558     elif get_type == "get_auth":    #匿名下载
559         file_name = request.GET.get("file_name")
560         user = request.GET.get("user")
561         get_file_path = OneFile.objects.filter(onefile_name=file_name,user_id=user)
562         for obj in get_file_path:
563             file_path = obj.onefile_dir
564         file=open(file_path,'rb')
565         response =FileResponse(file)
566         response['Content-Type']='application/octet-stream'
567         response['Content-Disposition']='attachment;filename="'+file_name.encode("utf-8")+'"'
568         return response
569     else:
570         return redirect('/login')
571
572 #匿名下载模块
573 @csrf_exempt
574 def get_auth(request):
575     r = redis.Redis(host='127.0.0.1', port=6379)
576     if request.method == "POST":
577         Random = request.POST.get("Random")
578         file_name = request.POST.get("file_name")
579         user = request.POST.get("user")
580
581         get_file_path = OneFile.objects.filter(onefile_name=file_name)
582         for obj in get_file_path:
583             file_path = obj.onefile_dir
584             file_size = obj.file_size
585             file_user = obj.user_id
586         file_path_join = file_path+"_"+user
587
588         recv_redis_auth = json.loads(r.get(hashlib.sha256(file_path_join.encode("utf-8")).hexdigest()))
589         file_time = r.ttl(hashlib.sha256(file_path_join.encode("utf-8")).hexdigest())/3600/24
590
591         if recv_redis_auth["random"] == Random:
592             return HttpResponse(json.dumps({"status":"success","file_name1":file_name,"file_size":file_size,"file_user":file_user,"file_time":file_time}))
593         else:
594             return HttpResponse(json.dumps({"status":"failed"}))
595     else:
596         url_info = request.get_full_path().split("?")[1]
597         redis_url = json.loads(r.get(url_info))
598         file_name = redis_url["url"].split("file_name=")[1].split("&")[0]
599         user = redis_url["user"]
600         return render(request,"get_auth.html",{"file_name":file_name,"user":user})
601
602 #部门文件下载
603 def file_get_team(request):
604     is_login = request.session.get('IS_LOGIN',False)
605     ran_id = request.session.get('random',False)
606
607     if is_login:
608         login_user = recv_username_redis(ran_id)
609         result = user_auth(login_user)
610         if result == "auth_success":
611             pass
612         elif result == "auth_failed":
613             return redirect('/login')
614
615         username = recv_username_redis(ran_id)
616         file_name = request.GET.get("file_name")
617
618         get_file_path = TeamFile.objects.filter(teamfile_name=file_name)
619         for obj in get_file_path:
620             file_path = obj.teamfile_dir
621
622         file=open(file_path,'rb')
623         response =FileResponse(file)
624         response['Content-Type']='application/octet-stream'
625         response['Content-Disposition']='attachment;filename="'+file_name.encode("utf-8")+'"'
626         return response
627     else:
628         return redirect('/login')
629
630 #公司文件下载
631 def file_get_company(request):
632     is_login = request.session.get('IS_LOGIN',False)
633     ran_id = request.session.get('random',False)
634
635     if is_login:
636         login_user = recv_username_redis(ran_id)
637         result = user_auth(login_user)
638         if result == "auth_success":
639             pass
640         elif result == "auth_failed":
641             return redirect('/login')
642
643         username = recv_username_redis(ran_id)
644         file_name = request.GET.get("file_name")
645
646         get_file_path = CompanyFile.objects.filter(companyfile_name=file_name)
647         for obj in get_file_path:
648             file_path = obj.companyfile_dir
649
650         file=open(file_path,'rb')
651         response =FileResponse(file)
652         response['Content-Type']='application/octet-stream'
653         response['Content-Disposition']='attachment;filename="'+file_name.encode("utf-8")+'"'
654         return response
655     else:
656         return redirect('/login')
657
658 #回收站
659 @csrf_exempt
660 def recycle(request):
661     is_login = request.session.get('IS_LOGIN',False)
662     ran_id = request.session.get('random',False)
663     if is_login:
664         login_user = recv_username_redis(ran_id)
665         result = user_auth(login_user)
666         if result == "auth_success":
667             pass
668         elif result == "auth_failed":
669             return redirect('/login')
670
671         if request.method == "POST":
672             username = recv_username_redis(ran_id)
673             select_type = request.POST.get("type")
674         else:
675             return render_to_response("recycle.html")
676     else:
677         return redirect('/login')
678
679 #文件共享
680 @csrf_exempt
681 def share_info(request):
682     is_login = request.session.get('IS_LOGIN',False)
683     ran_id = request.session.get('random',False)
684     if is_login:
685         login_user = recv_username_redis(ran_id)
686         result = user_auth(login_user)
687         if result == "auth_success":
688             pass
689         elif result == "auth_failed":
690             return redirect('/login')
691
692         if request.method == "POST":
693             username = recv_username_redis(ran_id)
694             print(username)
695         else:
696             return render_to_response("share_info.html")
697     else:
698         return redirect('/login')

3、models.py 数据表设计

 1 # -*- coding: utf-8 -*-
 2 from __future__ import unicode_literals
 3
 4 from django.db import models
 5
 6 #存放部门信息
 7 class TeamInfo(models.Model):
 8     team_id = models.AutoField(primary_key=True)
 9     team_name = models.CharField(max_length=128,verbose_name="部门名称")
10     create_user = models.CharField(max_length=64,verbose_name="创建人")
11     datatime = models.CharField(max_length=64,verbose_name="时间")
12     flage = models.CharField(max_length=32,verbose_name="状态标记")
13     team_path = models.CharField(max_length=1024,verbose_name="部门目录地址")
14     team_path_del = models.CharField(max_length=1024,verbose_name="部门目录地址")
15     def __str__(self):
16         return "%s %s %s %s" %(self.team_id,self.team_name,self.datatime,self.create_user)
17
18 #存放用户信息
19 class UserInfo(models.Model):
20     team =  models.ForeignKey('TeamInfo')
21     user_name = models.CharField(max_length=128,verbose_name="姓名",primary_key=True)
22     user_passwd = models.CharField(max_length=512,verbose_name="密码")
23     user_mobile = models.CharField(max_length=32,verbose_name="手机")
24     user_email = models.CharField(max_length=32,verbose_name="邮箱")
25     user_roles = models.CharField(max_length=32,verbose_name="角色")   #分为超级管理员super admin、管理员admin、普通用户guest
26     flage = models.CharField(max_length=32,verbose_name="状态标记")
27     user_path = models.CharField(max_length=1024,verbose_name="个人目录地址")
28     user_path_del = models.CharField(max_length=1024,verbose_name="个人目录地址")
29     def __str__(self):
30         return "%s" %(self.user_name)
31
32 #个人ftp文件信息
33 class OneFile(models.Model):
34     user = models.ForeignKey('UserInfo')
35     onefile_dir = models.CharField(max_length=1024,verbose_name="个人目录地址")
36     onefile_dir_all_list = models.CharField(max_length=1024,verbose_name="授权列表")
37     onefile_name = models.CharField(max_length=128,verbose_name="文件名")
38     onefile_del_dir = models.CharField(max_length=1024,verbose_name="个人目录地址-回收站")
39     onefile_del_dir_all_list = models.CharField(max_length=1024,verbose_name="授权列表")
40     onefile_del_name = models.CharField(max_length=128,verbose_name="文件名")
41     datatime = models.CharField(max_length=64,verbose_name="上传时间")
42     lasttime = models.CharField(max_length=64,verbose_name="最后修改时间")
43     file_type = models.CharField(max_length=64,verbose_name="文件类型")
44     flage = models.CharField(max_length=32,verbose_name="状态标记")
45     file_size = models.CharField(max_length=32,verbose_name="文件大小")
46     onefile_share = models.CharField(max_length=512,verbose_name="文件分享标记")
47
48     def __str__(self):
49         return "%s %s %s %s %s %s" %(self.onefile_dir,self.onefile_dir_all_list,self.onefile_del_dir,self.onefile_del_dir_all_list,self.datatime,self.lasttime)
50
51 #部门ftp文件信息
52 class TeamFile(models.Model):
53     team = models.ForeignKey('TeamInfo')
54     own_user = models.CharField(max_length=32,verbose_name="文件所有者")
55     teamfile_dir = models.CharField(max_length=1024,verbose_name="部门目录地址")
56     teamfile_all_list = models.CharField(max_length=1024,verbose_name="授权列表")
57     teamfile_name = models.CharField(max_length=128,verbose_name="文件名")
58     teamfile_del_dir = models.CharField(max_length=1024,verbose_name="部门目录地址")
59     teamfile_del_dir_all_list = models.CharField(max_length=1024,verbose_name="授权列表")
60     teamfile_del_name = models.CharField(max_length=128,verbose_name="文件名")
61     datatime = models.CharField(max_length=64,verbose_name="上传时间")
62     lasttime = models.CharField(max_length=64,verbose_name="最后修改时间")
63     file_type = models.CharField(max_length=64,verbose_name="文件类型")
64     flage = models.CharField(max_length=32,verbose_name="状态标记")
65     file_size = models.CharField(max_length=32,verbose_name="文件大小")
66
67     def __str__(self):
68         return "%s %s %s %s %s %s" %(self.teamfile_dir,self.teamfile_all_list,self.teamfile_del_dir,self.teamfile_del_dir_all_list,self.datatime,self.lasttime)
69
70
71 #公司ftp文件信息,默认只有管理员,超级管理员,上传人可以删除,其他人都不能做删除
72 class CompanyFile(models.Model):
73     own_user = models.CharField(max_length=32,verbose_name="文件所有者")
74     companyfile_dir = models.CharField(max_length=1024,verbose_name="公司目录地址")
75     companyfile_all_list = models.CharField(max_length=1024,verbose_name="授权列表")
76     companyfile_name = models.CharField(max_length=128,verbose_name="文件名")
77     companyfile_del_dir = models.CharField(max_length=1024,verbose_name="公司目录地址")
78     companyfile_del_dir_all_list = models.CharField(max_length=1024,verbose_name="授权列表")
79     companyfile_del_name = models.CharField(max_length=128,verbose_name="文件名")
80     datatime = models.CharField(max_length=64,verbose_name="上传时间")
81     lasttime = models.CharField(max_length=64,verbose_name="最后修改时间")
82     file_type = models.CharField(max_length=64,verbose_name="文件类型")
83     flage = models.CharField(max_length=32,verbose_name="状态标记")
84     file_size = models.CharField(max_length=32,verbose_name="文件大小")
85
86     def __str__(self):
87         return "%s %s %s %s %s %s" %(self.companyfile_dir,self.companyfile_all_list,self.companyfile_del_dir,self.companyfile_del_dir_all_list,self.datatime,self.lasttime)

4、数据库中数据存放样式:

5、文件上传到服务器中之后,是做了随机重命名的,所以如果没有拿到数据库中对应的原始文件名进行重命名还原,是无法知道文件的名称的。

转载于:https://www.cnblogs.com/qiyuanchang/p/9835149.html

django+javascrpt+python实现私有云盘代码相关推荐

  1. python云盘私有云_GitHub - 0x2642/Umi-Chest: 一个基于python的私有云实验项目

    Umi-Chest 一个基于angular 4的单页面舰娘百科App 关于项目名是因为kuma一直找不到好的名字,因为联想到海,然后我喜欢海爷,所以本来想叫海爷百宝箱什么的(一个舰娘的App你叫海爷百 ...

  2. 用python建云盘_实用的Python(3)超简单!基于Python搭建个人“云盘”

    1 简介 当我们想要从本地向云服务器上传文件时,比较常用的有pscp等工具,但避免不了每次上传都要写若干重复的代码,而笔者最近发现的一个基于Python的工具updog,可以帮助我们在服务器上搭建类似 ...

  3. python云盘搭建教程_超简单!基于Python搭建个人“云盘”,目前最好用的个人云盘...

    超简单!基于Python搭建个人"云盘",目前最好用的个人云盘 1. 简介 当我们想要从本地向云服务器上传文件时,比较常用的有pscp等工具,但避免不了每次上传都要写若干重复的代码 ...

  4. 开源私有云盘python_搭建个人/企业私有云盘-seafile

    LINUX Linux操作系统 搭建个人/企业私有云盘-seafile 一.安装依赖组件 安装前的准备工作安装 Seafile 服务器之前,请确认已安装以下软件MariaDB 或者 MySQL 服务器 ...

  5. linux 访问西数网盘,不买iCloud了,果粉福音:WD 西数 My Cloud Home 3TB 私有云盘 开箱体验...

    不买iCloud了,果粉福音:WD 西数 My Cloud Home 3TB 私有云盘 开箱体验 2018-05-29 20:04:35 25点赞 136收藏 47评论 虽然换了很多手机,但是自己的照 ...

  6. 家庭私有云盘系列教程-安装使用NextCloud个人云存储系统

    2019独角兽企业重金招聘Python工程师标准>>> 方案前文:建立一个家庭私有云盘方案系列教程+N2n+Nextcloud 前一篇:家庭私有云盘系列教程-建立公网服务器实现外网访 ...

  7. 是时候该搭建自己的私有云盘了——nextcloud 12

    一.背景 最近多家云盘相继关停,费了很多时间才把上面的东西下载到本地,百度云盘也早已开始限速,技术宅岂能容忍?是时候搭建自己的私有云盘了! 1.搭建自己的私有云有什么好处呢? 首先没有什么容量.下载速 ...

  8. 使用ipv6内网穿透,实现私有云盘搭建,实现远程控制等功能

    文章目录 问题 获得计算机的ipv6地址 ipv6变化问题 解决-桌面远程控制 ipv6控制路由器 解决-私有云盘搭建 创建服务端B的环境配置 创建服务端可以访问的用户账户 配置服务器对ipv6地址访 ...

  9. 用树莓派搭建远程下载+私有云盘(中篇)

    用树莓派搭建远程下载+私有云盘(中篇) 上一篇介绍了跟树莓派的第一次亲密接触,如何给树莓派烧录系统.查找内网IP.如何SSH连接树莓派,本章介绍如何安装迅雷远程固件,将树莓派打造成迅雷远程下载服务器. ...

最新文章

  1. 计算机NLP注意力机制思想和实现原理讲的较清晰
  2. typedef和define的详细区别
  3. Android学习:自定义ViewGroup方法总结
  4. Redis源码解析:07压缩列表
  5. SNF快速开发平台2019-权限管理模型简介-权限都在这里
  6. [译]写程序更快、更好、更便宜的艺术
  7. 《Python游戏趣味编程》 第4章 疯狂的小圆圈
  8. Fixjs实践——标签、按钮控件
  9. 文件摆渡是什么意思_小白学炒股:除权、填权、贴权是个什么东东?
  10. MySql学习10-----存储过程和函数
  11. 台式电脑开机一直卡在正在启动windows怎么办
  12. 分享股票量化交易程序化模型的设计思路
  13. QML中使用QSortFilterProxyModel进行排序和过滤
  14. Git回滚到某个commit
  15. 用计算机如何修改wif密码,电脑怎么修改无线网(WIFI)密码?
  16. 深度学习在高德驾车导航历史速度预测中的探索与实践
  17. printJs 打印HTML 去掉页眉页脚
  18. mysql pk nn uq b un_MYSQL_WorkBench中创建新表时对PK NN UQ B UN ZF AI的理解
  19. surface book 3 结束休眠之后风扇狂转
  20. 解决PC微信版本过低 1.0.7.33版本及以上版本方法

热门文章

  1. 【hive】beeline常用操作指令
  2. 功能中进行频繁查询、提高查询效率的方法
  3. 强化学习-Q-Learning算法
  4. 诙谐术语讲解:热备,冷备,云备,以及IT行业各种备份术语
  5. AMD显卡安装Caffe|深度学习|Ubuntu
  6. 【1】学习前言及数据分析的简单介绍jupyter的介绍与安装
  7. 电脑连不上ishanghai_i-Shanghai免费上网将不限时 详解如何上网不掉线
  8. 【Excel实战】--目录及链接
  9. 25、Java面向对象——抽象类和抽象方法、接口
  10. RK3568 Android11从入门到实战项目专栏目录及介绍