user.py 13 KB

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