user.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  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. if not request.POST['role']==user.role.id:
  149. if request.POST['username']==request.user.username:
  150. kwvars = {'request':request,'xerror':"您不能修改自己的角色",}
  151. return render_to_response('UserManage/user.edit.error.html',kwvars,RequestContext(request))
  152. elif request.POST['role']=="1":
  153. if not request.user.is_superuser:
  154. kwvars = {'request':request,'xerror':"您无权给用户赋予网站管理员权限,这需要超级管理员权限(root账号)",}
  155. return render_to_response('UserManage/user.edit.error.html',kwvars,RequestContext(request))
  156. form = EditUserForm(request.POST,instance=user)
  157. if form.is_valid():
  158. form.save()
  159. return HttpResponseRedirect(reverse('listuserurl'))
  160. else:
  161. form = EditUserForm(instance=user
  162. )
  163. kwvars = {
  164. 'ID':ID,
  165. 'form':form,
  166. 'request':request,
  167. }
  168. return render_to_response('UserManage/user.edit.html',kwvars,RequestContext(request))
  169. @login_required
  170. @PermissionVerify()
  171. def DeleteUser(request,ID):
  172. if ID == '1':
  173. return HttpResponse(u'超级管理员不允许删除!!!')
  174. else:
  175. get_user_model().objects.filter(id = ID).delete()
  176. return HttpResponseRedirect(reverse('listuserurl'))
  177. @login_required
  178. @PermissionVerify()
  179. def ResetPassword(request,ID):
  180. user = get_user_model().objects.get(id = ID)
  181. newpassword = get_user_model().objects.make_random_password(length=10,allowed_chars='abcdefghjklmnpqrstuvwxyABCDEFGHJKLMNPQRSTUVWXY3456789')
  182. print '====>ResetPassword:%s-->%s' %(user.username,newpassword)
  183. user.set_password(newpassword)
  184. user.save()
  185. kwvars = {
  186. 'object':user,
  187. 'newpassword':newpassword,
  188. 'request':request,
  189. }
  190. return render_to_response('UserManage/password.reset.html',kwvars,RequestContext(request))
  191. @login_required
  192. def AddXlsError(request):
  193. kwvars = {
  194. 'request':request,
  195. }
  196. return render_to_response('UserManage/user.addxls.error.html',kwvars,RequestContext(request))
  197. @login_required
  198. @PermissionVerify()
  199. def XLSFileUser(request):
  200. if request.method=='POST':
  201. form = XLSFileForm(request.POST,request.FILES)
  202. if form.is_valid():
  203. try:
  204. userdata=processxls(request.FILES['xls'])
  205. except Exception,e:
  206. kwvars = {'request':request,'xerror':e,}
  207. return render_to_response('UserManage/user.addxls.error.html',kwvars,RequestContext(request))
  208. try:
  209. studentrole=RoleList.objects.get(name = u'普通学生')
  210. ipid = UniqueID()
  211. querysetlist=[]
  212. for ud in userdata:
  213. if ud[0]!=0:
  214. try:
  215. t_user=User(username=str(ud[0]),
  216. sid=ud[0],
  217. classid=GroupList.objects.get(classid = ud[4]),
  218. is_active=True,
  219. nickname=ud[1],
  220. sex=ud[2],
  221. birthday=ud[5],
  222. password=make_password(ud[3], None, "unsalted_md5"),
  223. role=studentrole,
  224. importid = ipid)
  225. #t_user.set_password(ud[3])
  226. querysetlist.append(t_user)
  227. except GroupList.DoesNotExist:
  228. kwvars = {'request':request,'xerror':u"无效的分组ID:%d (在学号为%d的行)"%(ud[4],ud[0])}
  229. return render_to_response('UserManage/user.addxls.error.html',kwvars,RequestContext(request))
  230. except Exception,e:
  231. kwvars = {'request':request,'xerror':e,}
  232. return render_to_response('UserManage/user.addxls.error.html',kwvars,RequestContext(request))
  233. User.objects.bulk_create(querysetlist)
  234. except Exception,e:
  235. kwvars = {'request':request,'xerror':e,}
  236. return render_to_response('UserManage/user.addxls.error.html',kwvars,RequestContext(request))
  237. return HttpResponseRedirect(reverse('listuserurl'))
  238. else:
  239. form = XLSFileForm()
  240. kwvars = {
  241. 'form':form,
  242. 'request':request,
  243. }
  244. return render_to_response('UserManage/user.addxls.html',kwvars,RequestContext(request))
  245. @login_required
  246. @PermissionVerify()
  247. def RemoveUsers(request):
  248. #get_user_model().objects.filter(id = ID).delete()
  249. if request.method=='POST':
  250. form = RemoveUsersForm(request.POST)
  251. if form.is_valid():
  252. try:
  253. #classid = GroupList.objects.get(classid = form.cleaned_data["classid"])
  254. for cid in form.cleaned_data["classid"]:
  255. users = get_user_model().objects.filter(classid = cid)
  256. for i in users:
  257. if i.id == 1:
  258. raise Exception,u'超级管理员不允许删除!!!'
  259. users.delete()
  260. return HttpResponseRedirect(reverse('listuserurl'))
  261. except Exception,e:
  262. kwvars = {'request':request,'xerror':e,}
  263. return render_to_response('UserManage/user.remove.error.html',kwvars,RequestContext(request))
  264. else:
  265. form = RemoveUsersForm()
  266. kwvars = {
  267. 'form':form,
  268. 'request':request,
  269. }
  270. return render_to_response('UserManage/user.removeusers.html',kwvars,RequestContext(request))
  271. @login_required
  272. @PermissionVerify()
  273. def RemoveUsers_ByIpid(request,ID):
  274. try:
  275. uobj = User.objects.filter(importid=ID).delete()
  276. return HttpResponseRedirect(reverse("listuserurl"))
  277. except Exception,e:
  278. kwvars = {'request':request,'xerror':e,}
  279. return render_to_response('UserManage/user.remove.error.html',kwvars,RequestContext(request))
  280. @login_required
  281. @PermissionVerify()
  282. def ExpUsers_ByIpid(request,ID):
  283. try:
  284. uobj = User.objects.filter(importid=ID)[:10]
  285. lst=map(lambda x:unicode(x.sid)+u"   "+unicode(x.nickname),uobj)
  286. ret=u"<br />".join(lst)
  287. return HttpResponse(ret)
  288. except Exception,e:
  289. return HttpResponse(u"错误:"+unicode(e))
  290. @login_required
  291. def ChangInfo(request):
  292. user = request.user
  293. if request.method=='POST':
  294. form = ChangeUserForm(request.POST,instance=user)
  295. if form.is_valid():
  296. form.save()
  297. return HttpResponseRedirect('/')
  298. else:
  299. form = ChangeUserForm(instance=user
  300. )
  301. kwvars = {
  302. 'ID':user.id,
  303. 'form':form,
  304. 'request':request,
  305. }
  306. return render_to_response('UserManage/user.change.html',kwvars,RequestContext(request))