user.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  1. #!/usr/bin/env python
  2. #-*- coding: utf-8 -*-
  3. from django.core.urlresolvers import reverse
  4. from django.http import HttpResponse,HttpResponseRedirect
  5. from django.shortcuts import render_to_response,RequestContext
  6. from django.contrib.auth.decorators import login_required
  7. from swyzxwb_photovote.common.CommonPaginator import SelfPaginator
  8. from swyzxwb_photovote.common.CommonFilter import CommonFilter,FilterCondition
  9. from UserManage.views.permission import PermissionVerify
  10. from UserManage.xlsusers import processxls
  11. from UserManage.models import User,RoleList,GroupList
  12. import hashlib
  13. from django.contrib.auth.hashers import make_password
  14. from django.contrib import auth
  15. from django.contrib.auth import get_user_model
  16. from UserManage.forms import LoginUserForm,SignInUserForm,ChangePasswordForm,AddUserForm,EditUserForm,XLSFileForm,RemoveUsersForm,ChangeUserForm,AddAdminForm
  17. from swyzxwb_photovote.common.DataConvert import UniqueID
  18. def LoginUser(request):
  19. '''用户登录view'''
  20. if request.user.is_authenticated():
  21. return HttpResponseRedirect('/')
  22. if request.method == 'GET' and request.GET.has_key('next'):
  23. next = request.GET['next']
  24. else:
  25. next = '/'
  26. if request.method == "POST":
  27. form = LoginUserForm(request, data=request.POST)
  28. if form.is_valid():
  29. auth.login(request, form.get_user())
  30. return HttpResponseRedirect(request.POST['next'])
  31. else:
  32. form = LoginUserForm(request)
  33. kwvars = {
  34. 'request':request,
  35. 'form':form,
  36. 'next':next,
  37. }
  38. return render_to_response('UserManage/login.html',kwvars,RequestContext(request))
  39. def SignUp(request):
  40. '''用户注册view'''
  41. if request.user.is_authenticated():
  42. return HttpResponseRedirect('/')
  43. if request.method=='POST':
  44. form = SignInUserForm(request.POST)
  45. if form.is_valid():
  46. user = form.save(commit=False)
  47. user.set_password(form.cleaned_data['password'])
  48. user.role=RoleList.objects.get(name=u'学生')
  49. user.is_active = False
  50. user.is_superuser = False
  51. form.save()
  52. return HttpResponseRedirect(reverse('loginurl'))
  53. else:
  54. form = SignInUserForm()
  55. kwvars = {
  56. 'form':form,
  57. 'request':request,
  58. }
  59. return render_to_response('UserManage/user.signup.html',kwvars,RequestContext(request))
  60. @login_required
  61. def LogoutUser(request):
  62. auth.logout(request)
  63. return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
  64. @login_required
  65. def ChangePassword(request):
  66. if request.method=='POST':
  67. form = ChangePasswordForm(user=request.user,data=request.POST)
  68. if form.is_valid():
  69. form.save()
  70. return HttpResponseRedirect(reverse('logouturl'))
  71. else:
  72. form = ChangePasswordForm(user=request.user)
  73. kwvars = {
  74. 'form':form,
  75. 'request':request,
  76. }
  77. return render_to_response('UserManage/password.change.html',kwvars,RequestContext(request))
  78. @login_required
  79. @PermissionVerify()
  80. def ListUser(request):
  81. mList = get_user_model().objects.all()
  82. #筛选器
  83. classobjs = GroupList.objects.all()
  84. allclass=map(lambda x:x.name,classobjs)
  85. fco = FilterCondition()
  86. fco.addTextContain("sid","编号","sid")
  87. fco.addTextContain("name","用户名","username")
  88. fco.addTextContain("nick","姓名","nickname")
  89. fco.addTextContain("mail","邮箱","email")
  90. fco.addMultiChoice("class","班级","classid__name",allclass)
  91. fco.addDateRange("bthdy","生日","birthday")
  92. fco.addNumberEqual("importid","导入批号","ipid")
  93. fco.addSingleChoice("sex","性别","sex",["男","女"])
  94. fList = CommonFilter(request,fco,mList)
  95. #分页功能
  96. lst = SelfPaginator(request,fList, 20)
  97. kwvars = {
  98. 'lPage':lst,
  99. 'request':request,
  100. 'FilterHTML':fco.RenderHTML(request)
  101. }
  102. return render_to_response('UserManage/user.list.html',kwvars,RequestContext(request))
  103. @login_required
  104. @PermissionVerify()
  105. def AddUser(request):
  106. if request.method=='POST':
  107. form = AddUserForm(request.POST)
  108. if form.is_valid():
  109. user = form.save(commit=False)
  110. user.set_password(form.cleaned_data['password'])
  111. user.importid = UniqueID()
  112. print "Unique HASH",user.importid
  113. form.save()
  114. return HttpResponseRedirect(reverse('listuserurl'))
  115. else:
  116. form = AddUserForm()
  117. kwvars = {
  118. 'form':form,
  119. 'request':request,
  120. }
  121. return render_to_response('UserManage/user.add.html',kwvars,RequestContext(request))
  122. @login_required
  123. @PermissionVerify()
  124. def AddAdmin(request):
  125. if request.method=='POST':
  126. form = AddAdminForm(request.POST)
  127. if form.is_valid():
  128. user = form.save(commit=False)
  129. user.set_password(form.cleaned_data['password'])
  130. user.role=RoleList.objects.get(name=u'管理员')
  131. user.importid = UniqueID()
  132. user.is_active = True
  133. user.is_superuser = True
  134. form.save()
  135. return HttpResponseRedirect(reverse('listuserurl'))
  136. else:
  137. form = AddAdminForm()
  138. kwvars = {
  139. 'form':form,
  140. 'request':request,
  141. }
  142. return render_to_response('UserManage/user.addadmin.html',kwvars,RequestContext(request))
  143. @login_required
  144. @PermissionVerify()
  145. def EditUser(request,ID):
  146. user = get_user_model().objects.get(id = ID)
  147. if request.method=='POST':
  148. form = EditUserForm(request.POST,instance=user)
  149. if form.is_valid():
  150. form.save()
  151. return HttpResponseRedirect(reverse('listuserurl'))
  152. else:
  153. form = EditUserForm(instance=user
  154. )
  155. kwvars = {
  156. 'ID':ID,
  157. 'form':form,
  158. 'request':request,
  159. }
  160. return render_to_response('UserManage/user.edit.html',kwvars,RequestContext(request))
  161. @login_required
  162. @PermissionVerify()
  163. def DeleteUser(request,ID):
  164. if ID == '1':
  165. return HttpResponse(u'超级管理员不允许删除!!!')
  166. else:
  167. get_user_model().objects.filter(id = ID).delete()
  168. return HttpResponseRedirect(reverse('listuserurl'))
  169. @login_required
  170. @PermissionVerify()
  171. def ResetPassword(request,ID):
  172. user = get_user_model().objects.get(id = ID)
  173. newpassword = get_user_model().objects.make_random_password(length=10,allowed_chars='abcdefghjklmnpqrstuvwxyABCDEFGHJKLMNPQRSTUVWXY3456789')
  174. print '====>ResetPassword:%s-->%s' %(user.username,newpassword)
  175. user.set_password(newpassword)
  176. user.save()
  177. kwvars = {
  178. 'object':user,
  179. 'newpassword':newpassword,
  180. 'request':request,
  181. }
  182. return render_to_response('UserManage/password.reset.html',kwvars,RequestContext(request))
  183. @login_required
  184. def AddXlsError(request):
  185. kwvars = {
  186. 'request':request,
  187. }
  188. return render_to_response('UserManage/user.addxls.error.html',kwvars,RequestContext(request))
  189. @login_required
  190. @PermissionVerify()
  191. def XLSFileUser(request):
  192. if request.method=='POST':
  193. form = XLSFileForm(request.POST,request.FILES)
  194. if form.is_valid():
  195. try:
  196. userdata=processxls(request.FILES['xls'])
  197. except Exception,e:
  198. kwvars = {'request':request,'xerror':e,}
  199. return render_to_response('UserManage/user.addxls.error.html',kwvars,RequestContext(request))
  200. try:
  201. studentrole=RoleList.objects.get(name = u'普通学生')
  202. ipid = UniqueID()
  203. querysetlist=[]
  204. for ud in userdata:
  205. if ud[0]!=0:
  206. try:
  207. t_user=User(username=str(ud[0]),
  208. sid=ud[0],
  209. classid=GroupList.objects.get(classid = ud[4]),
  210. is_active=True,
  211. nickname=ud[1],
  212. sex=ud[2],
  213. birthday=ud[5],
  214. password=make_password(ud[3], None, "unsalted_md5"),
  215. role=studentrole,
  216. importid = ipid)
  217. #t_user.set_password(ud[3])
  218. querysetlist.append(t_user)
  219. except GroupList.DoesNotExist:
  220. kwvars = {'request':request,'xerror':u"无效的分组ID:%d (在学号为%d的行)"%(ud[4],ud[0])}
  221. return render_to_response('UserManage/user.addxls.error.html',kwvars,RequestContext(request))
  222. except Exception,e:
  223. kwvars = {'request':request,'xerror':e,}
  224. return render_to_response('UserManage/user.addxls.error.html',kwvars,RequestContext(request))
  225. User.objects.bulk_create(querysetlist)
  226. except Exception,e:
  227. kwvars = {'request':request,'xerror':e,}
  228. return render_to_response('UserManage/user.addxls.error.html',kwvars,RequestContext(request))
  229. return HttpResponseRedirect(reverse('listuserurl'))
  230. else:
  231. form = XLSFileForm()
  232. kwvars = {
  233. 'form':form,
  234. 'request':request,
  235. }
  236. return render_to_response('UserManage/user.addxls.html',kwvars,RequestContext(request))
  237. @login_required
  238. @PermissionVerify()
  239. def RemoveUsers(request):
  240. #get_user_model().objects.filter(id = ID).delete()
  241. if request.method=='POST':
  242. form = RemoveUsersForm(request.POST)
  243. if form.is_valid():
  244. try:
  245. #classid = GroupList.objects.get(classid = form.cleaned_data["classid"])
  246. for cid in form.cleaned_data["classid"]:
  247. users = get_user_model().objects.filter(classid = cid)
  248. for i in users:
  249. if i.id == 1:
  250. raise Exception,u'超级管理员不允许删除!!!'
  251. users.delete()
  252. return HttpResponseRedirect(reverse('listuserurl'))
  253. except Exception,e:
  254. kwvars = {'request':request,'xerror':e,}
  255. return render_to_response('UserManage/user.remove.error.html',kwvars,RequestContext(request))
  256. else:
  257. form = RemoveUsersForm()
  258. kwvars = {
  259. 'form':form,
  260. 'request':request,
  261. }
  262. return render_to_response('UserManage/user.removeusers.html',kwvars,RequestContext(request))
  263. @login_required
  264. def ChangInfo(request):
  265. user = request.user
  266. if request.method=='POST':
  267. form = ChangeUserForm(request.POST,instance=user)
  268. if form.is_valid():
  269. form.save()
  270. return HttpResponseRedirect('/')
  271. else:
  272. form = ChangeUserForm(instance=user
  273. )
  274. kwvars = {
  275. 'ID':user.id,
  276. 'form':form,
  277. 'request':request,
  278. }
  279. return render_to_response('UserManage/user.change.html',kwvars,RequestContext(request))