Browse Source

Signed-off-by: zry <admin@z-touhou.org>

zry 8 years ago
parent
commit
8d82d6679e

+ 1 - 0
UserManage/urls.py

@@ -11,6 +11,7 @@ urlpatterns = patterns('UserManage.views',
     url(r'^user/removes/ipid/(?P<ID>\d+)/$', 'user.RemoveUsers_ByIpid', name='removesusersbyipid'),
     url(r'^user/removes/ipidexp/(?P<ID>\d+)/$', 'user.ExpUsers_ByIpid', name='expusersbyipid'),
     url(r'^user/addxls/$', 'user.XLSFileUser', name='addxlsuserurl'),
+    url(r'^user/addxls/xlspwd/$', 'user.XLSFileUser', name='addxlsuserurl'),
     url(r'^user/list/$', 'user.ListUser', name='listuserurl'),
     #url(r'^user/listnew/$', 'user.ListNewUser', name='listnewuserurl'),
     url(r'^user/edit/(?P<ID>\d+)/$', 'user.EditUser', name='edituserurl'),

+ 26 - 0
UserManage/views/user.py

@@ -9,6 +9,7 @@ from swyzxwb_photovote.common.CommonPaginator import SelfPaginator
 from swyzxwb_photovote.common.CommonFilter import CommonFilter,FilterCondition
 from UserManage.views.permission import PermissionVerify
 from UserManage.xlsusers import processxls
+from UserManage.xlspasswd import GeneratePasswdToXls
 from UserManage.models import User,RoleList,GroupList
 import hashlib
 from django.contrib.auth.hashers import make_password
@@ -288,6 +289,31 @@ def XLSFileUser(request):
 
     return render_to_response('UserManage/user.addxls.html',kwvars,RequestContext(request))
 
+#GeneratePasswdToXls
+
+@login_required
+@PermissionVerify()
+def XLSGeneratePasswd(request):
+    if request.method=='POST':
+        form = XLSFileForm(request.POST,request.FILES)
+        if form.is_valid():
+            try:
+                xlsname=GeneratePasswdToXls(request.FILES['xls'])
+                kwvars = {'request':request,'xlsfile':e,}
+                return render_to_response('UserManage/user.xlspasswd.html',kwvars,RequestContext(request))
+            except Exception,e:
+                kwvars = {'request':request,'xerror':e,}
+                return render_to_response('UserManage/user.addxls.error.html',kwvars,RequestContext(request))
+            
+    else:
+        form = XLSFileForm()
+
+    kwvars = {
+        'form':form,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/user.xlspassgen.html',kwvars,RequestContext(request))
 
 @login_required
 @PermissionVerify()

+ 27 - 8
UserManage/xlspasswd.py

@@ -1,7 +1,8 @@
-import xlrd
+import xlrd,xlwt
 import datetime
 import uuid
 import os
+from django.conf import settings
 
 
 def process_cell(table,i,j):
@@ -12,8 +13,13 @@ def process_cell(table,i,j):
     return str(int(_temp.value))
   #raise "Error xls!"
 
-def processxls(FILE):
+def randompass():
+  return uuid.uuid4().get_bytes().encode("base64")[:10]
+
+def GeneratePasswdToXls(FILE):
   BASE_DIR = os.path.dirname(os.path.dirname(__file__))
+  wrxlsname = 'pwdout-%s.xls' % str(uuid.uuid4())
+  wrxlspath = os.path.join(settings.MEDIA_ROOT,'xls',wrxlsname )
   xlsname = os.path.join(BASE_DIR, 'uploads', '%s.xls' % str(uuid.uuid4()))
   destination = open(xlsname,'wb')
   for chunk in FILE.chunks(): 
@@ -31,14 +37,20 @@ def processxls(FILE):
   assert head[5].strip()==u'\u751f\u65e5'
 
 
-
-  rets=[]
+  rwb = xlwt.Workbook(encoding='utf-8')
+  rsh = rwb.add_sheet('Sheet1')
+  rsh.write(0,0,u'\u5b66\u53f7')
+  rsh.write(0,1,u'\u59d3\u540d')
+  rsh.write(0,2,u'\u6027\u522b')
+  rsh.write(0,3,u'\u5bc6\u7801')
+  rsh.write(0,4,u'\u5206\u7ec4\u53f7')
+  rsh.write(0,5,u'\u751f\u65e5')
   for i in range(table.nrows-1):
     col = table.row_values(i+1)
     sid=str(int(col[0]))
     name=process_cell(table,i+1,1)
     sex=col[2]
-    password=process_cell(table,i+1,3)
+    password=randompass()
     cid=str(int(col[4]))
 
     if table.cell(i+1,5).ctype==3:
@@ -51,7 +63,14 @@ def processxls(FILE):
           birthday = datetime.datetime.strptime(process_cell(table,i+1,5), "%Y%m%d").date()
         except:
           pass
-          #raise "Error xls!"
-    rets.append((sid,name,sex,password,cid,birthday))
-  return rets
+    
+    rsh.write(i+1,0,sid)
+    rsh.write(i+1,0,name)
+    rsh.write(i+1,0,sex)
+    rsh.write(i+1,0,password)
+    rsh.write(i+1,0,cid)
+    rsh.write(i+1,0,birthday)
+  rwb.save(wrxlspath)
+  return wrxlsname
+    
 

+ 0 - 0
static/uploads/xls/xls_dir


BIN
static/usertest.xls


+ 44 - 0
templates/UserManage/user.xlspassgen.html

@@ -0,0 +1,44 @@
+{% extends "base.html" %}
+
+{% block title %}
+    生成随机密码
+{% endblock %}
+
+{% block content %}
+
+<div class="section section-breadcrumbs section-breadcrumbs-backend">
+    <div class="container">
+        <div class="row">
+            <div class="col-md-12">
+                <h1>生成随机密码</h1>
+            </div>
+        </div>
+    </div>
+</div>
+
+<hr/>
+
+
+	<h4 class="col-md-offset-1">请导入符合<code>批量导入用户</code>页面要求格式的XLS文件,表的密码字段可以留空或随意填写。</h4>
+    <h4 class="col-md-offset-1">导入完毕后将会用随机密码填充表的密码字段,然后您可以下载新表,到<code>批量导入用户</code>页面导入。</h4>
+	<hr/>
+    <form class="form-horizontal" role="form" action="{% url 'xlspasswdurl' %}" method="POST" enctype="multipart/form-data">
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-2">{{item.label}}</label>
+                <div class="col-md-2">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-2 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="col-md-offset-2">
+                <button type="submit" class="btn btn-primary btn-lg">导入并生成随机密码</button>
+        </div>
+    </form>
+{% endblock %}

+ 33 - 0
templates/UserManage/user.xlspasswd.html

@@ -0,0 +1,33 @@
+{% extends "base.html" %}
+
+{% block title %}
+    导入数据错误
+{% endblock %}
+
+{% block content %}
+    <div class="section section-breadcrumbs section-breadcrumbs-backend">
+        <div class="container">
+            <div class="row">
+                <div class="col-md-12">
+                    <h1>随机密码生成成功!</h1>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <hr/>
+
+
+	<div class="container theme-showcase" role="main">
+	<center>
+	<h3>已生成包含随机密码的xls文件,请下载文件:</h3>
+      <div class="alert alert-danger" role="alert">
+        请<a href="/static/uploads/xls/{{xlsname}}">下载</a>文件,然后在<code>批量导入用户</code>页面导入用户,并且打印该表发给用户。
+      </div>
+	</center> 
+	</div>
+
+{% endblock %}
+
+
+

+ 5 - 1
templates/vote/restart.html

@@ -17,17 +17,21 @@
 
 <div class="well well-lg"  style="background:#FFF; color:#000">
 	<h1>注意:请确保没有重要数据未导出,方可进行下面的步骤。</h1>
+    <p>准备工作具有一定的工作量,请细心耐心地操作。</p>
 </div>
 
 <h2>第一步:清理旧用户</h2>
 <hr />
     <p>前往<code>管理用户</code>页面,使用<code>批量删除</code>或<code>按导入批号删除</code>删除新一轮投票不需要的旧用户。</p>
+    <p>如果您能联系上超级管理员(ZRY),您可以请他帮忙直接将本系统恢复出厂设置,这样就只需要删除批号为<code></code>的测试用户,节约您不少工作量。</p>
 
 <h2>第二步:导入新用户</h2>
 <hr />
     <p>前往<code>批量导入用户</code>页面,下载模板,然后制作出需要导入的用户名单。</p>
     <p>如果需要生成随机密码,可以使用<code>随机密码工具</code>生成随机密码。</p>
     <p>一般地,我们以班级(或部门)为单位,做成一张张表,然后导入,每次导入都会拥有一个导入编号,这个编号可以用于日后按批号批量删除。</p>
+    <p>导入成功后,请到<code>管理用户</code>页面,通过筛选器找到工作人员和参赛人员的账户,修改他们的角色。</p>
+    <p>角色为<code>活动总负责</code>的账号亦有编辑用户的权限,如果参赛人员众多,可以多人协助完成修改角色的工作。</p>
 
 <h2>第三步:重置作品数据库</h2>
 <hr />
@@ -42,7 +46,7 @@
     <p>上传可以使用Windows自带的FTP功能,即打开“计算机”(WinXP上叫“我的电脑”),在地址栏输入<code>ftp://photoupload.9zry.com:2211/</code>并回车,
     会弹出输入用户名密码的窗口,输入用户名和密码,即可上传文件。但鉴于Windows自带的FTP功能不稳定,速度慢,推荐使用开源FTP客户端FileZilla,
     <a href="">下载该软件</a>下载后解压运行filezilla.exe即可。</p>
-    <p>一定要按照要求重命名之后再上传文件,上传的文件不允许有以下情况:</p>
+    <p>一定要按照要求重命名之后再上传文件,上传的文件不允许有以下情况:</p>
     <ul>
         <li>文件名不符合第四步所述规范的文件(一定概率会导致FTP无法再次登陆)</li>
         <li>文件内容涉及政治、暴力、色情、恐怖主义,或者侵犯他人著作权。</li>