views.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. # -*- coding: UTF-8 -*-
  2. from django.core.urlresolvers import reverse
  3. from django.http import HttpResponse,HttpResponseRedirect
  4. from django.shortcuts import render_to_response,RequestContext
  5. from django.contrib.auth.decorators import login_required
  6. from swyzxwb_photovote.common.CommonPaginator import SelfPaginator
  7. from swyzxwb_photovote.common.CommonFilter import CommonFilter,FilterCondition
  8. from swyzxwb_photovote.common.DataConvert import CheckPOST,str2int
  9. from UserManage.views.permission import PermissionVerify
  10. from django.contrib import auth
  11. from django.contrib.auth import get_user_model
  12. from django.conf import settings
  13. from vote.models import *
  14. from UserManage.models import *
  15. from vote.genemptyxls import GenEmptyXLSFunc
  16. from swyzxwb_photovote.common.DataConvert import UniqueID
  17. from UserManage.forms import XLSFileForm
  18. from vote.xlsadd import processPWXLS
  19. import uuid
  20. #import traceback
  21. @login_required
  22. @PermissionVerify()
  23. def sysRestart(request):
  24. kwvars = {'request':request}
  25. return render_to_response('vote/restart.html',kwvars,RequestContext(request))
  26. @login_required
  27. @PermissionVerify()
  28. def ListContestants(request):
  29. mList = Contestants.objects.all()
  30. #筛选器
  31. classobjs = GroupList.objects.all()
  32. allclass=map(lambda x:x.name,classobjs)
  33. fco = FilterCondition()
  34. fco.addTextContain("sid","参赛者用户名","user__username")
  35. fco.addTextContain("nick","参赛者姓名","user__nickname")
  36. fco.addTextContain("nick","作品ID","works_set__uuid")
  37. fco.addTextContain("title","作品标题","works_set__title")
  38. fco.addMultiChoice("class","组别","classid__name",allclass)
  39. fList = CommonFilter(request,fco,mList)
  40. #分页功能
  41. lst = SelfPaginator(request,fList, 20)
  42. kwvars = {
  43. 'lPage':lst,
  44. 'request':request,
  45. 'FilterHTML':fco.RenderHTML(request)
  46. }
  47. return render_to_response('vote/contestant.list.html',kwvars,RequestContext(request))
  48. @login_required
  49. @PermissionVerify()
  50. def ListVoteRecords(request):
  51. mList = VoteRecords.objects.all()
  52. #筛选器
  53. fco = FilterCondition()
  54. fco.addTextContain("cun","参赛者用户名","target__author__user__sid")
  55. fco.addTextContain("cnk","参赛者姓名","target__author__user__nickname")
  56. fco.addTextContain("vun","投票者用户名","voter__username")
  57. fco.addTextContain("vnk","投票者姓名","voter__nickname")
  58. fco.addTextContain("pwid","作品ID","target__uuid")
  59. fco.addTextContain("pwtt","作品标题","target__title")
  60. fList = CommonFilter(request,fco,mList)
  61. #分页功能
  62. lst = SelfPaginator(request,fList, 20)
  63. kwvars = {
  64. 'lPage':lst,
  65. 'request':request,
  66. 'FilterHTML':fco.RenderHTML(request)
  67. }
  68. return render_to_response('vote/vr.list.html',kwvars,RequestContext(request))
  69. @login_required
  70. @PermissionVerify()
  71. def ListPhotoWorks(request):
  72. mList = PhotoWorks.objects.all()
  73. #筛选器
  74. classobjs = GroupList.objects.all()
  75. allclass=map(lambda x:x.name,classobjs)
  76. fco = FilterCondition()
  77. fco.addTextContain("uuid","作品ID","uuid")
  78. fco.addTextContain("author","作者用户名","author__user__username")
  79. fco.addTextContain("anick","作者姓名","author__user__nickname")
  80. fco.addTextContain("title","作品标题","title")
  81. fco.addTextContain("file","文件名","filename")
  82. fco.addMultiChoice("ext","扩展名","fileext",['jpg','png','gif'])
  83. fco.addMultiChoice("cls","作者组别","author__user__classid__name",allclass)
  84. fco.addNumberGreatThan("score","分数大于等于","score",True)
  85. fco.addNumberLessThan("score","分数小于等于","score",True)
  86. fco.addNumberEqual("importid","导入批号","ipid")
  87. fList = CommonFilter(request,fco,mList)
  88. #分页功能
  89. lst = SelfPaginator(request,fList, 20)
  90. kwvars = {
  91. 'lPage':lst,
  92. 'request':request,
  93. 'FilterHTML':fco.RenderHTML(request)
  94. }
  95. return render_to_response('vote/pw.list.html',kwvars,RequestContext(request))
  96. @login_required
  97. @PermissionVerify()
  98. def ListTopPhotoWorks(request):
  99. mList = PhotoWorks.objects.all().order_by('-score')
  100. #分页功能
  101. lst = SelfPaginator(request,mList, 20)
  102. kwvars = {
  103. 'lPage':lst,
  104. 'request':request
  105. }
  106. return render_to_response('vote/pw.toplist.html',kwvars,RequestContext(request))
  107. @login_required
  108. @PermissionVerify()
  109. def ListPersonalPW(request):
  110. mList = PhotoWorks.objects.filter(author__user=request.user)
  111. #分页功能
  112. lst = SelfPaginator(request,mList, 20)
  113. kwvars = {
  114. 'lPage':lst,
  115. 'request':request
  116. }
  117. return render_to_response('vote/pw.plist.html',kwvars,RequestContext(request))
  118. @login_required
  119. @PermissionVerify()
  120. def DeletePhotoWorks(request,ID):
  121. PhotoWorks.objects.filter(id = ID).delete()
  122. return HttpResponseRedirect(reverse('pwlist'))
  123. @login_required
  124. @PermissionVerify()
  125. def RemovePW_ByIpid(request,ID):
  126. try:
  127. PhotoWorks.objects.filter(importid=ID).delete()
  128. return HttpResponseRedirect(reverse("pwlist"))
  129. except Exception,e:
  130. kwvars = {"msg":"按批号删除作品失败","detail":"按批号删除作品失败","error":str(e)}
  131. return render_to_response('error.html',kwvars,RequestContext(request))
  132. @login_required
  133. @PermissionVerify()
  134. def ExpPW_ByIpid(request,ID):
  135. try:
  136. pwobj = PhotoWorks.objects.filter(importid=ID)[:10]
  137. lst=map(lambda x:unicode(x.author.user.username)+u"   "+unicode(x.title),pwobj)
  138. ret=u"<br />".join(lst)
  139. return HttpResponse(ret)
  140. except Exception,e:
  141. return HttpResponse(u"错误:"+unicode(e))
  142. def ViewPhotoWorks(request,uuid):
  143. try:
  144. pwobj = PhotoWorks.objects.get(uuid=uuid)
  145. try:
  146. npwobj = PhotoWorks.objects.get(id=pwobj.id+1)
  147. hasnext = True
  148. nextuuid = npwobj.uuid
  149. except PhotoWorks.DoesNotExist:
  150. hasnext = False
  151. nextuuid = ""
  152. if request.user.is_authenticated():
  153. try:
  154. vrobj = VoteRecords.objects.get(voter=request.user)
  155. hadvoted = True
  156. votedpw = vrobj.target.title
  157. except VoteRecords.DoesNotExist:
  158. hadvoted = False
  159. votedpw = ""
  160. else:
  161. hadvoted = False
  162. votedpw = ""
  163. kwvars = {'request':request,'pwobj':pwobj,'pwurl':settings.PHOTO_DIR_URL,'hasnext':hasnext,'nextuuid':nextuuid,'hadvoted':hadvoted,'votedpw':votedpw}
  164. return render_to_response('vote/pw.view.html',kwvars,RequestContext(request))
  165. except PhotoWorks.DoesNotExist:
  166. kwvars = {"msg":"404 作品不存在","detail":"您所查看的摄影作品不存在","error":"PhotoWorks '%s' Not Found."%uuid}
  167. return render_to_response('error.html',kwvars,RequestContext(request))
  168. def FrontListPhotoWorks(request):
  169. pwlist = PhotoWorks.objects.all()
  170. lst = SelfPaginator(request,pwlist, 16)
  171. kwvars = {'request':request,'lPage':lst,'pwurl':settings.PHOTO_DIR_URL,'thumbargs':settings.THUMB_ARGS}
  172. return render_to_response('vote/pw.flist.html',kwvars,RequestContext(request))
  173. def VotePhotoWorks(request,uuid):
  174. try:
  175. pwobj = PhotoWorks.objects.get(uuid=uuid)
  176. if request.method=='POST':
  177. chkpr=CheckPOST(['comment',],request.POST.keys())
  178. if not chkpr == "" :
  179. kwvars = {"msg":"投票失败","detail":"POST参数错误","error":"Invalid POST Data. Field '"+chkpr+"' Not Found."}
  180. return render_to_response('error.html',kwvars,RequestContext(request))
  181. cmt = request.POST['comment']
  182. try:
  183. vrobj = VoteRecords.objects.get(voter=request.user)
  184. oldpw = vrobj.target
  185. vrobj.target = pwobj
  186. vrobj.comment = cmt
  187. vrobj.save()
  188. oldpw.score = VoteRecords.objects.filter(target=oldpw).count()
  189. oldpw.save()
  190. except VoteRecords.DoesNotExist:
  191. vrobj = VoteRecords.objects.create(voter=request.user,target=pwobj,comment=cmt)
  192. pwobj.score = VoteRecords.objects.filter(target=pwobj).count()
  193. pwobj.save()
  194. return HttpResponseRedirect(reverse('pwflist'))
  195. else:
  196. kwvars = {'request':request,'pwobj':pwobj,'pwurl':settings.PHOTO_DIR_URL}
  197. return render_to_response('vote/pw.vote.html',kwvars,RequestContext(request))
  198. except PhotoWorks.DoesNotExist:
  199. kwvars = {"msg":"404 作品不存在","detail":"您所投票的摄影作品不存在","error":"PhotoWorks '%s' Not Found."%uuid}
  200. return render_to_response('error.html',kwvars,RequestContext(request))
  201. @login_required
  202. def PersonalVoteRec(request):
  203. try:
  204. vrobj = VoteRecords.objects.get(voter=request.user)
  205. hadvoted = True
  206. except VoteRecords.DoesNotExist:
  207. hadvoted = False
  208. vrobj = None
  209. kwvars = {'request':request,'hadvoted':hadvoted,'vrobj':vrobj,'pwurl':settings.PHOTO_DIR_URL}
  210. return render_to_response('vote/vr.flist.html',kwvars,RequestContext(request))
  211. @login_required
  212. @PermissionVerify()
  213. def GenEmptyXLS(request):
  214. if request.method=='POST':
  215. chkpr=CheckPOST(['nor',],request.POST.keys())
  216. if not chkpr == "" :
  217. kwvars = {"msg":"创建空表失败","detail":"POST参数错误","error":"Invalid POST Data. Field '"+chkpr+"' Not Found."}
  218. return render_to_response('error.html',kwvars,RequestContext(request))
  219. else:
  220. try:
  221. xlsname=GenEmptyXLSFunc(str2int(request.POST['nor']))
  222. kwvars = {'request':request,'xlsname':xlsname}
  223. return render_to_response('vote/pw.xlsgendown.html',kwvars,RequestContext(request))
  224. except Exception,e:
  225. kwvars = {"msg":"创建空表失败","detail":"生成进程抛出异常","error":e}
  226. return render_to_response('error.html',kwvars,RequestContext(request))
  227. else:
  228. kwvars = {'request':request}
  229. return render_to_response('vote/pw.xlsgen.html',kwvars,RequestContext(request))
  230. def DeleteContestant(request,ID):
  231. cobj = Contestants.objects.get(id=ID)
  232. cobj.works_set.all().delete()
  233. cobj.delete()
  234. return HttpResponseRedirect(reverse('contestantslist'))
  235. @login_required
  236. @PermissionVerify()
  237. def XLSFilePW(request):
  238. if request.method=='POST':
  239. form = XLSFileForm(request.POST,request.FILES)
  240. if form.is_valid():
  241. try:
  242. userdata=processPWXLS(request.FILES['xls'])
  243. except Exception,e:
  244. kwvars = {"msg":u"导入作品失败","detail":u"解析xls文件失败","error":unicode(e)}
  245. return render_to_response('error.html',kwvars,RequestContext(request))
  246. try:
  247. ipid = UniqueID()
  248. querysetlist=[]
  249. for ud in userdata:
  250. try:
  251. cobj = Contestants.objects.get(user__username=ud[1])
  252. except Contestants.DoesNotExist:
  253. try:
  254. auobj = User.objects.get(username=ud[1])
  255. cobj = Contestants.objects.create(user=auobj)
  256. cobj.save()
  257. except User.DoesNotExist:
  258. kwvars = {"msg":u"导入作品失败","detail":u"参赛者用户名错误","error":u"不存在的参赛者用户名: %s (在作品ID为%s的行)"%(ud[1],ud[0])}
  259. return render_to_response('error.html',kwvars,RequestContext(request))
  260. if ud[0]!="":
  261. try:
  262. t_data=PhotoWorks(uuid=ud[0],
  263. author=cobj,
  264. title=ud[2],
  265. desc=ud[3],
  266. filename=ud[4],
  267. fileext=ud[5],
  268. importid=ipid,
  269. score=0)
  270. #t_user.set_password(ud[3])
  271. querysetlist.append(t_data)
  272. except Exception,e:
  273. kwvars = {"msg":u"导入作品失败","detail":u"导入参赛作品到数据库失败","error":unicode(e)}
  274. return render_to_response('error.html',kwvars,RequestContext(request))
  275. PhotoWorks.objects.bulk_create(querysetlist)
  276. except Exception,e:
  277. kwvars = {"msg":"导入作品失败","detail":"从xls文件导入参赛作品失败","error":unicode(e)}
  278. #kwvars = {"msg":u"导入作品失败","detail":unicode(e),"error":traceback.format_exc()}
  279. return render_to_response('error.html',kwvars,RequestContext(request))
  280. return HttpResponseRedirect(reverse('pwlist'))
  281. else:
  282. form = XLSFileForm()
  283. kwvars = {
  284. 'form':form,
  285. 'request':request,
  286. }
  287. return render_to_response('vote/pw.addxls.html',kwvars,RequestContext(request))