zoukankan      html  css  js  c++  java
  • django+javascrpt+python实现私有云盘代码

    丁丁:由于篇幅有限,这里暂时只展示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、文件上传到服务器中之后,是做了随机重命名的,所以如果没有拿到数据库中对应的原始文件名进行重命名还原,是无法知道文件的名称的。

  • 相关阅读:
    java笔试之数字颠倒
    java笔试之取近似值
    java笔试之求int型正整数在内存中存储时1的个数
    js日期格式化Date
    【算法导论C++代码】归并排序
    Unity3D 错误nativeVideoFrameCallback的解决方法
    Unity3D脚本(MonoBehaviour)生命周期分析
    Unity3D 移动MM failed to find resource file{mmiap.xml}解
    Unity3D C#打开外部应用程序,并检测应用程序是否关闭退出
    Unity3d脚本执行顺序详解
  • 原文地址:https://www.cnblogs.com/qiyuanchang/p/9835149.html
Copyright © 2011-2022 走看看