Browse Source

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

zry 8 years ago
parent
commit
ed5b256414
6 changed files with 210 additions and 3 deletions
  1. 33 0
      templates/error.html
  2. 43 0
      templates/vote/pw.xlsgen.html
  3. 84 0
      templates/vote/user.xlsgendown.html
  4. 25 0
      vote/genemptyxls.py
  5. 4 2
      vote/urls.py
  6. 21 1
      vote/views.py

+ 33 - 0
templates/error.html

@@ -0,0 +1,33 @@
+{% extends "base.html" %}
+
+{% block title %}
+    {{msg}}
+{% endblock %}
+
+{% block content %}
+<div class="section section-breadcrumbs section-breadcrumbs-backend">
+    <div class="container">
+        <div class="row">
+            <div class="col-md-12">
+                <h1>{{msg}}</h1>
+            </div>
+        </div>
+    </div>
+</div>
+<hr/>
+
+
+	<div class="container theme-showcase" role="main">
+	<center>
+	<h3>{{detail}}</h3>
+      <div class="alert alert-danger" role="alert">
+        <strong>错误信息: </strong>{{error}}
+      </div>
+      <h3><a href="javascript:history.back();">返回之前的页面&raquo;</a></h3>
+	</center> 
+	</div>
+
+{% endblock %}
+
+
+

+ 43 - 0
templates/vote/pw.xlsgen.html

@@ -0,0 +1,43 @@
+{% 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 'pwemptyxlsgen' %}" method="POST">
+    {% csrf_token %}
+    <div class="form-group">
+        <label for="num_of_row">参赛作品数量</label>
+        <input type="email" class="form-control" id="num_of_row" name="nor" placeholder="输入参赛作品数量"></div>
+        <div class="alert alert-info" role="alert">
+            <p>友情提示:您可以输入一个大于参赛作品数目的值,然后在填写完表后把没有用到的行清空</p>
+        </div>
+    <div class="col-md-offset-2">
+        <button type="submit" class="btn btn-primary btn-lg">生成空表</button>
+    </div>
+</form>
+{% endblock %}

+ 84 - 0
templates/vote/user.xlsgendown.html

@@ -0,0 +1,84 @@
+{% 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-info" role="alert">
+            请
+            <a href="/static/uploads/xls/{{xlsname}}" target="_blank">下载</a>
+            文件,然后在根据以下说明进行填写。填写完毕后前往
+            <code>参赛作品导入</code>
+            页面导入,然后通知网站管理员(如果您不是)将作品文件通过FTP上传。
+        </div>
+        <div class="panel panel-default">
+            <div class="panel-heading">
+                <h3 class="panel-title">空表填写说明</h3>
+            </div>
+            <div class="panel-body">
+                <p>
+                    下载空表并打开后,将参赛作品的信息填入表内,并将作品重命名为空表内生成好的文件名。如果作品文件的扩展名不是jpg,请修改
+                    <code>扩展名</code>
+                    字段。
+                </p>
+                <p>以下是各个字段的功能说明:</p>
+                <table class="table table-bordered">
+                    <thead>
+                        <tr>
+                            <th>#</th>
+                            <th>字段名称</th>
+                            <th>说明</th>
+                            <th>示例</th>
+                        </tr>
+                    </thead>
+                    <tbody>
+                        <!-- 
+                        ws.write(0,0,u'作品ID')
+                        ws.write(0,1,u'参赛者用户名')
+                        ws.write(0,2,u'作品标题')
+                        ws.write(0,3,u'作品描述')
+                        ws.write(0,4,u'文件名')
+                        ws.write(0,5,u'文件扩展名')
+                        -->
+                        <tr>
+                            <th scope="row">1</th>
+                            <td>作品ID</td>
+                            <td>自动生成的作品ID,请不要修改</td>
+                            <td>@mdo</td>
+                        </tr>
+                        <tr>
+                            <th scope="row">2</th>
+                            <td>Jacob</td>
+                            <td>Thornton</td>
+                            <td>@fat</td>
+                        </tr>
+                        <tr>
+                            <th scope="row">3</th>
+                            <td>Larry</td>
+                            <td>the Bird</td>
+                            <td>@twitter</td>
+                        </tr>
+                    </tbody>
+                </table>
+            </div>
+        </div>
+    </center>
+    <a class="btn btn-lg btn-primary" href="{% url 'addxlsuserurl' %}">前往参赛作品导入页面</a>
+</div>
+{% endblock %}

+ 25 - 0
vote/genemptyxls.py

@@ -0,0 +1,25 @@
+# -*- coding: UTF-8 -*-
+import xlwt,uuid,md5
+from django.conf import settings
+
+def GenEmptyXLSFunc(num_of_row):
+	BASE_DIR = os.path.dirname(os.path.dirname(__file__))
+	wrxlsname = 'emptyphotoworks-%s.xls' % str(uuid.uuid4())
+	wrxlspath = os.path.join(settings.MEDIA_ROOT,'xls',wrxlsname )
+	wb = xlwt.Workbook(encoding='utf-8')
+	ws = wb.add_sheet("PhotoWorks")
+	ws.write(0,0,u'作品ID')
+	ws.write(0,1,u'参赛者用户名')
+	ws.write(0,2,u'作品标题')
+	ws.write(0,3,u'作品描述')
+	ws.write(0,4,u'文件名')
+	ws.write(0,5,u'文件扩展名')
+	for i in range(1,num_of_row+1):
+		u=str(uuid.uuid4())
+		m=md5.md5(u)
+		ms=m.hexdigest()
+		ws.write(i,0,u)
+		ws.write(i,4,ms)
+		ws.write(i,5,"jpg")
+	wb.save(wrxlspath)
+	return wrxlsname

+ 4 - 2
vote/urls.py

@@ -2,6 +2,8 @@ from django.conf.urls import patterns, include, url
 
 urlpatterns = patterns('vote.views',
     url(r'^system/restart/$', 'sysRestart', name='sys_restart'),
-    url(r'^contestant/list/$', 'ListContestants', name='contestantslist'),
-    url(r'^contestant/delete/(?P<ID>\d+)/$', 'DeleteContestant', name='deletecturl'),
+    url(r'^admin/contestant/list/$', 'ListContestants', name='contestantslist'),
+    url(r'^admin/contestant/delete/(?P<ID>\d+)/$', 'DeleteContestant', name='deletecturl'),
+    url(r'^admin/photoworks/emptyxls/gen$', 'GenEmptyXLS', name='contestantslist'),
+
 )

+ 21 - 1
vote/views.py

@@ -10,6 +10,7 @@ from django.contrib import auth
 from django.contrib.auth import get_user_model
 from vote.models import *
 from UserManage.models import *
+from vote.genemptyxls import GenEmptyXLSFunc
 
 @login_required
 @PermissionVerify()
@@ -43,7 +44,26 @@ def ListContestants(request):
 
 	return render_to_response('vote/contestant.list.html',kwvars,RequestContext(request))
 
-
+@login_required
+@PermissionVerify()
+def GenEmptyXLS(request):
+	if request.method=='POST':
+		chkpr=CheckPOST(['nor',],request.POST.keys())
+		if not chkpr == "" :
+			kwvars = {"msg":"创建空表失败","detail":"POST参数错误","error":"Invalid POST Data. Field '"+chkpr+"' Not Found."}
+			return render_to_response('error.html',kwvars,RequestContext(request))
+		else:
+			try:
+				xlsname=GenEmptyXLSFunc(str2int(request.POST['nor']))
+				kwvars = {'request':request,'xlsname':xlsname}
+				return render_to_response('UserManage/pw.xlsgendown.html',kwvars,RequestContext(request))
+			except Exception,e:
+				kwvars = {"msg":"创建空表失败","detail":"生成进程抛出异常","error":e}
+				return render_to_response('error.html',kwvars,RequestContext(request))
+			
+	else:
+		kwvars = {'request':request}
+		return render_to_response('UserManage/user.xlspassgen.html',kwvars,RequestContext(request))
 
 def DeleteContestant(request,ID):
 	cobj = Contestants.objects.get(id=ID)