丁丁:由于篇幅有限,这里暂时只展示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)