Browse Source

Django Project Init

zry 8 years ago
parent
commit
5dafbc1eef
70 changed files with 5018 additions and 8 deletions
  1. 0 0
      UserManage/__init__.py
  2. 3 0
      UserManage/admin.py
  3. 180 0
      UserManage/fixtures/initial_data.json
  4. 354 0
      UserManage/forms.py
  5. 85 0
      UserManage/models.py
  6. 1 0
      UserManage/templatetags/__init__.py
  7. 27 0
      UserManage/templatetags/httpgetargs.py
  8. 41 0
      UserManage/urls.py
  9. 0 0
      UserManage/views/__init__.py
  10. 131 0
      UserManage/views/group.py
  11. 117 0
      UserManage/views/permission.py
  12. 89 0
      UserManage/views/role.py
  13. 352 0
      UserManage/views/user.py
  14. 39 0
      UserManage/xlsgroups.py
  15. 57 0
      UserManage/xlsusers.py
  16. 4 1
      swyzxwb_photovote/settings.py
  17. 10 7
      swyzxwb_photovote/urls.py
  18. 20 0
      swyzxwb_photovote/views.py
  19. 55 0
      templates/UserManage/group.add.html
  20. 46 0
      templates/UserManage/group.add.html.bak
  21. 45 0
      templates/UserManage/group.addxls.error.html
  22. 36 0
      templates/UserManage/group.addxls.error.html.bak
  23. 55 0
      templates/UserManage/group.addxls.html
  24. 44 0
      templates/UserManage/group.addxls.html.bak
  25. 56 0
      templates/UserManage/group.edit.html
  26. 47 0
      templates/UserManage/group.edit.html.bak
  27. 54 0
      templates/UserManage/group.list.html
  28. 45 0
      templates/UserManage/group.list.html.bak
  29. 45 0
      templates/UserManage/group.remove.error.html
  30. 36 0
      templates/UserManage/group.remove.error.html.bak
  31. 68 0
      templates/UserManage/group.removegroups.html
  32. 59 0
      templates/UserManage/group.removegroups.html.bak
  33. 86 0
      templates/UserManage/login.html
  34. 45 0
      templates/UserManage/password.change.html
  35. 28 0
      templates/UserManage/password.reset.html
  36. 51 0
      templates/UserManage/permission.add.html
  37. 51 0
      templates/UserManage/permission.edit.html
  38. 50 0
      templates/UserManage/permission.list.html
  39. 17 0
      templates/UserManage/permission.no.html
  40. 65 0
      templates/UserManage/role.add.html
  41. 65 0
      templates/UserManage/role.edit.html
  42. 48 0
      templates/UserManage/role.list.html
  43. 46 0
      templates/UserManage/role.plist.html
  44. 41 0
      templates/UserManage/user.add.html
  45. 42 0
      templates/UserManage/user.add.html.bak
  46. 41 0
      templates/UserManage/user.addadmin.html
  47. 33 0
      templates/UserManage/user.addxls.error.html
  48. 45 0
      templates/UserManage/user.addxls.html
  49. 42 0
      templates/UserManage/user.addxls.html.bak
  50. 39 0
      templates/UserManage/user.change.html
  51. 50 0
      templates/UserManage/user.edit.html
  52. 43 0
      templates/UserManage/user.edit.html.bak
  53. 69 0
      templates/UserManage/user.list.html
  54. 60 0
      templates/UserManage/user.list.html.bak
  55. 59 0
      templates/UserManage/user.listnew.html
  56. 41 0
      templates/UserManage/user.remove.error.html
  57. 64 0
      templates/UserManage/user.removeusers.html
  58. 154 0
      templates/UserManage/user.signup.html
  59. 20 0
      templates/about.html
  60. 313 0
      templates/admin.html
  61. 167 0
      templates/base.html
  62. 135 0
      templates/common/Filter/maindiv.html
  63. 19 0
      templates/common/paginator.html
  64. 9 0
      templates/footer.backend.html
  65. 18 0
      templates/footer.html
  66. 62 0
      templates/home.html
  67. 160 0
      templates/layout.html
  68. 145 0
      templates/leftmenu.html
  69. 353 0
      templates/sidebar.html
  70. 41 0
      vote/urls.py

+ 0 - 0
UserManage/__init__.py


+ 3 - 0
UserManage/admin.py

@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.

+ 180 - 0
UserManage/fixtures/initial_data.json

@@ -0,0 +1,180 @@
+[{
+	"pk": 1,
+	"model": "UserManage.permissionlist",
+	"fields": {
+		"url": "/accounts/user/edit/",
+		"name": "\u7f16\u8f91\u7528\u6237"
+	}
+}, {
+	"pk": 2,
+	"model": "UserManage.permissionlist",
+	"fields": {
+		"url": "/accounts/user/delete/",
+		"name": "\u5220\u9664\u7528\u6237"
+	}
+}, {
+	"pk": 3,
+	"model": "UserManage.permissionlist",
+	"fields": {
+		"url": "/accounts/user/list/",
+		"name": "\u7528\u6237\u5217\u8868"
+	}
+}, {
+	"pk": 4,
+	"model": "UserManage.permissionlist",
+	"fields": {
+		"url": "/accounts/user/resetpwd/",
+		"name": "\u91cd\u7f6e\u5bc6\u7801"
+	}
+}, {
+	"pk": 5,
+	"model": "UserManage.permissionlist",
+	"fields": {
+		"url": "/accounts/user/changepwd/",
+		"name": "\u4fee\u6539\u5bc6\u7801"
+	}
+}, {
+	"pk": 6,
+	"model": "UserManage.permissionlist",
+	"fields": {
+		"url": "/accounts/role/edit/",
+		"name": "\u7f16\u8f91\u89d2\u8272"
+	}
+}, {
+	"pk": 7,
+	"model": "UserManage.permissionlist",
+	"fields": {
+		"url": "/accounts/role/delete/",
+		"name": "\u5220\u9664\u89d2\u8272"
+	}
+}, {
+	"pk": 8,
+	"model": "UserManage.permissionlist",
+	"fields": {
+		"url": "/accounts/permission/add/",
+		"name": "\u6dfb\u52a0\u6743\u9650"
+	}
+}, {
+	"pk": 9,
+	"model": "UserManage.permissionlist",
+	"fields": {
+		"url": "/accounts/role/add/",
+		"name": "\u6dfb\u52a0\u89d2\u8272"
+	}
+}, {
+	"pk": 10,
+	"model": "UserManage.permissionlist",
+	"fields": {
+		"url": "/accounts/permission/edit/",
+		"name": "\u7f16\u8f91\u6743\u9650"
+	}
+}, {
+	"pk": 11,
+	"model": "UserManage.permissionlist",
+	"fields": {
+		"url": "/accounts/permission/delete/",
+		"name": "\u5220\u9664\u6743\u9650"
+	}
+}, {
+	"pk": 12,
+	"model": "UserManage.permissionlist",
+	"fields": {
+		"url": "/accounts/permission/list/",
+		"name": "\u6743\u9650\u5217\u8868"
+	}
+}, {
+	"pk": 13,
+	"model": "UserManage.permissionlist",
+	"fields": {
+		"url": "/accounts/group/add/",
+		"name": "\u6dfb\u52a0\u5206\u7ec4"
+	}
+}, {
+	"pk": 14,
+	"model": "UserManage.permissionlist",
+	"fields": {
+		"url": "/accounts/group/edit/",
+		"name": "\u4fee\u6539\u5206\u7ec4"
+	}
+}, {
+	"pk": 15,
+	"model": "UserManage.permissionlist",
+	"fields": {
+		"url": "/accounts/group/delete/",
+		"name": "\u5220\u9664\u5206\u7ec4"
+	}
+}, {
+	"pk": 1,
+	"model": "UserManage.rolelist",
+	"fields": {
+		"name": "\u7ba1\u7406\u5458",
+		"permission": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
+	}
+}, {
+	"pk": 2,
+	"model": "UserManage.rolelist",
+	"fields": {
+		"name": "\u5b66\u751f",
+		"permission": [5]
+	}
+}, {
+	"pk": 1,
+	"model": "UserManage.grouplist",
+	"fields": {
+		"classid": 2014211301,
+		"name": "\u8ba1\u7b97\u673a1\u73ed"
+	}
+}, {
+	"pk": 2,
+	"model": "UserManage.grouplist",
+	"fields": {
+		"classid": 2014211302,
+		"name": "\u8ba1\u7b97\u673a2\u73ed"
+	}
+}, {
+	"pk": 3,
+	"model": "UserManage.grouplist",
+	"fields": {
+		"classid": 2014211303,
+		"name": "\u8ba1\u7b97\u673a3\u73ed"
+	}
+}, {
+	"pk": 4,
+	"model": "UserManage.grouplist",
+	"fields": {
+		"classid": 2014211304,
+		"name": "\u8ba1\u7b97\u673a4\u73ed"
+	}
+}, {
+	"pk": 1,
+	"model": "UserManage.user",
+	"fields": {
+		"username": "czq",
+		"classid": 1,
+		"is_active": true,
+		"sex": "\u7537",
+		"is_superuser": true,
+		"last_login": "2015-06-01 00:00:00",
+		"sid": 0,
+		"role": 1,
+		"password": "pbkdf2_sha256$12000$svcE6vCElVj8$E+yXsFWrOGO2JormqB0D/2gPq/g0SOvEUOjbfFW+Jlc=",
+		"nickname": "\u91d1\u5143\u6d69",
+		"email": "czq@qq.com"
+	}
+}, {
+	"pk": 2,
+	"model": "UserManage.user",
+	"fields": {
+		"username": "test",
+		"classid": 1,
+		"is_active": true,
+		"sex": "\u5973",
+		"is_superuser": false,
+		"last_login": "2015-06-01 00:00:00",
+		"sid": 2014211131,
+		"role": 2,
+		"password": "pbkdf2_sha256$12000$lsQZYAcR3xuv$6N/VM6AlJJUwil/HZ6d5L6b5fJ0n4+7//1BRz6zdZ9o=",
+		"nickname": "\u738b\u9732\u70b9",
+		"email": "test@qq.com"
+	}
+}]

+ 354 - 0
UserManage/forms.py

@@ -0,0 +1,354 @@
+#!/usr/bin/env python
+#-*- coding: utf-8 -*-
+
+from django import forms
+from django.contrib import auth
+from django.contrib.auth import get_user_model
+from UserManage.models import User,RoleList,PermissionList,GroupList,GroupListList
+import datetime
+
+class LoginUserForm(forms.Form):
+    username = forms.CharField(label=u'账 号',error_messages={'required':u'账号不能为空'},
+        widget=forms.TextInput(attrs={'class':'form-control',"placeholder":"请输入账号"}))
+    password = forms.CharField(label=u'密 码',error_messages={'required':u'密码不能为空'},
+        widget=forms.PasswordInput(attrs={'class':'form-control',"placeholder":"请输入密码"}))
+
+    def __init__(self, request=None, *args, **kwargs):
+        self.request = request
+        self.user_cache = None
+
+        super(LoginUserForm, self).__init__(*args, **kwargs)
+
+    def clean_password(self):
+        username = self.cleaned_data.get('username')
+        password = self.cleaned_data.get('password')
+
+        if username and password:
+            self.user_cache = auth.authenticate(username=username,password=password)
+            if self.user_cache is None:
+                raise forms.ValidationError(u'账号密码不匹配')
+            elif not self.user_cache.is_active:
+                raise forms.ValidationError(u'此账号已被禁用')
+        return self.cleaned_data
+
+    def get_user(self):
+        return self.user_cache
+
+class ChangePasswordForm(forms.Form):
+    old_password = forms.CharField(label=u'原始密码',error_messages={'required':'请输入原始密码'},
+        widget=forms.PasswordInput(attrs={'class':'form-control'}))
+    new_password1 = forms.CharField(label=u'新密码',error_messages={'required':'请输入新密码'},
+        widget=forms.PasswordInput(attrs={'class':'form-control'}))
+    new_password2 = forms.CharField(label=u'重复输入',error_messages={'required':'请重复新输入密码'},
+        widget=forms.PasswordInput(attrs={'class':'form-control'}))
+
+    def __init__(self, user, *args, **kwargs):
+        self.user = user
+        super(ChangePasswordForm, self).__init__(*args, **kwargs)
+
+    def clean_old_password(self):
+        old_password = self.cleaned_data["old_password"]
+        if not self.user.check_password(old_password):
+            raise forms.ValidationError(u'原密码错误')
+        return old_password
+
+    def clean_new_password2(self):
+        password1 = self.cleaned_data.get('new_password1')
+        password2 = self.cleaned_data.get('new_password2')
+        if len(password1)<6:
+            raise forms.ValidationError(u'密码必须大于6位')
+
+        if password1 and password2:
+            if password1 != password2:
+                raise forms.ValidationError(u'两次密码输入不一致')
+        return password2
+
+    def save(self, commit=True):
+        self.user.set_password(self.cleaned_data['new_password1'])
+        if commit:
+            self.user.save()
+        return self.user
+
+class AddUserForm(forms.ModelForm):
+    class Meta:
+        model = User
+        fields = ('username','password','sid','classid','email','nickname','sex','birthday','role','is_active')
+        widgets = {
+            'username' : forms.TextInput(attrs={'class':'form-control'}),
+            'password' : forms.PasswordInput(attrs={'class':'form-control'}),
+            'sid' : forms.TextInput(attrs={'class':'form-control'}),
+            'classid' : forms.Select(choices=[(x.name,x.name) for x in GroupList.objects.all()],attrs={'class':'form-control'}),
+            'email' : forms.TextInput(attrs={'class':'form-control'}),
+            'nickname' : forms.TextInput(attrs={'class':'form-control'}),
+            'sex' : forms.RadioSelect(choices=((u'男', u'男'),(u'女', u'女')),attrs={'class':'list-inline'}),
+            'birthday' : forms.TextInput(attrs={'class':'form-control'}),
+            'role' : forms.Select(attrs={'class':'form-control'}),
+            'is_active' : forms.Select(choices=((True, u'启用'),(False, u'禁用')),attrs={'class':'form-control'}),
+        }
+
+    def __init__(self,*args,**kwargs):
+        super(AddUserForm,self).__init__(*args,**kwargs)
+        self.fields['username'].label=u'账 号'
+        self.fields['username'].error_messages={'required':u'请输入账号'}
+        self.fields['password'].label=u'密 码'
+        self.fields['password'].error_messages={'required':u'请输入密码'}
+        self.fields['sid'].label=u'学 号'
+        self.fields['sid'].error_messages={'required':u'请输入学号','invalid':u'请输入有效学号'}
+        self.fields['classid'].label=u'分 组'
+        self.fields['classid'].error_messages={'required':u'请输入分组号','invalid':u'请输入有效分组号'}
+        self.fields['email'].label=u'邮 箱'
+        self.fields['email'].error_messages={'invalid':u'请输入有效邮箱'}
+        self.fields['nickname'].label=u'姓 名'
+        self.fields['nickname'].error_messages={'required':u'请输入姓名'}
+        self.fields['sex'].label=u'性 别'
+        self.fields['sex'].error_messages={'required':u'请选择性别'}
+        self.fields['birthday'].label=u'生 日'
+        self.fields['birthday'].error_messages={'invalid':u'请输入有效的生日'}
+        self.fields['role'].label=u'角 色'
+        self.fields['is_active'].label=u'状 态'
+
+    def clean_password(self):
+        password = self.cleaned_data.get('password')
+        if len(password) < 6:
+            raise forms.ValidationError(u'密码必须大于6位')
+        return password
+
+    def clean_sid(self):
+        sid = self.cleaned_data.get('sid')
+        if not str(sid).isdigit():
+            raise forms.ValidationError(u'学号必须为纯数字')
+        return sid
+
+
+
+class EditUserForm(forms.ModelForm):
+    class Meta:
+        model = User
+        fields = ('username','sid','classid','email','nickname','sex','birthday','role','is_active')
+        widgets = {
+            'username' : forms.TextInput(attrs={'class':'form-control'}),
+            #'password': forms.HiddenInput,
+            'sid' : forms.TextInput(attrs={'class':'form-control'}),
+            'classid' : forms.Select(choices=[(x.name,x.name) for x in GroupList.objects.all()],attrs={'class':'form-control'}),
+            'email' : forms.TextInput(attrs={'class':'form-control'}),
+            'nickname' : forms.TextInput(attrs={'class':'form-control'}),
+            'sex' : forms.RadioSelect(choices=((u'男', u'男'),(u'女', u'女')),attrs={'class':'list-inline'}),
+            'birthday' : forms.TextInput(attrs={'class':'form-control'}),
+            'role' : forms.Select(choices=[(x.name,x.name) for x in RoleList.objects.all()],attrs={'class':'form-control'}),
+            'is_active' : forms.Select(choices=((True, u'启用'),(False, u'禁用')),attrs={'class':'form-control'}),
+        }
+
+    def __init__(self,*args,**kwargs):
+        super(EditUserForm,self).__init__(*args,**kwargs)
+        self.fields['username'].label=u'账 号'
+        self.fields['username'].error_messages={'required':u'请输入账号'}
+        self.fields['sid'].label=u'学 号'
+        self.fields['sid'].error_messages={'required':u'请输入学号','invalid':u'请输入有效学号'}
+        self.fields['classid'].label=u'分 组'
+        self.fields['classid'].error_messages={'required':u'请输入分组号','invalid':u'请输入有效分组号'}
+        self.fields['email'].label=u'邮 箱'
+        self.fields['email'].error_messages={'invalid':u'请输入有效邮箱'}
+        self.fields['nickname'].label=u'姓 名'
+        self.fields['nickname'].error_messages={'required':u'请输入姓名'}
+        self.fields['sex'].label=u'性 别'
+        self.fields['sex'].error_messages={'required':u'请选择性别'}
+        self.fields['birthday'].label=u'生 日'
+        self.fields['birthday'].error_messages={'invalid':u'请输入有效的生日'}
+        self.fields['role'].label=u'角 色'
+        self.fields['is_active'].label=u'状 态'
+
+    def clean_password(self):
+        password = self.cleaned_data.get('password')
+        if len(password) < 6:
+            raise forms.ValidationError(u'密码必须大于6位')
+        return password
+
+    def clean_sid(self):
+        sid = self.cleaned_data.get('sid')
+        if not str(sid).isdigit():
+            raise forms.ValidationError(u'学号必须为纯数字')
+        return sid
+
+
+
+class PermissionListForm(forms.ModelForm):
+    class Meta:
+        model = PermissionList
+        widgets = {
+            'name' : forms.TextInput(attrs={'class':'form-control'}),
+            'url' : forms.TextInput(attrs={'class':'form-control'}),
+        }
+
+    def __init__(self,*args,**kwargs):
+        super(PermissionListForm,self).__init__(*args,**kwargs)
+        self.fields['name'].label=u'名 称'
+        self.fields['name'].error_messages={'required':u'请输入名称'}
+        self.fields['url'].label=u'URL'
+        self.fields['url'].error_messages={'required':u'请输入URL'}
+
+class RoleListForm(forms.ModelForm):
+    class Meta:
+        model = RoleList
+        widgets = {
+            'name' : forms.TextInput(attrs={'class':'form-control'}),
+            'permission' : forms.SelectMultiple(attrs={'class':'form-control','size':'10','multiple':'multiple'}),
+            #'permission' : forms.CheckboxSelectMultiple(choices=[(x.id,x.name) for x in PermissionList.objects.all()]),
+        }
+
+    def __init__(self,*args,**kwargs):
+        super(RoleListForm,self).__init__(*args,**kwargs)
+        self.fields['name'].label=u'名 称'
+        self.fields['name'].error_messages={'required':u'请输入名称'}
+        self.fields['permission'].label=u'URL'
+        self.fields['permission'].required=False
+
+
+class GroupListForm(forms.ModelForm):
+    class Meta:
+        model = GroupList
+        widgets = {
+            'name' : forms.TextInput(attrs={'class':'form-control'}),
+            'classid' : forms.TextInput(attrs={'class':'form-control'}),
+            #'users' : forms.SelectMultiple(attrs={'class':'form-control','size':'10','multiple':'multiple'}),
+            #'permission' : forms.CheckboxSelectMultiple(choices=[(x.id,x.name) for x in PermissionList.objects.all()]),
+        }
+
+    def __init__(self,*args,**kwargs):
+        super(GroupListForm,self).__init__(*args,**kwargs)
+        self.fields['name'].label=u'名 称'
+        self.fields['name'].error_messages={'required':u'请输入名称'}
+        self.fields['classid'].label=u'分组号'
+        self.fields['classid'].error_messages={'required':u'请输入分组号','invalid':u'请输入有效分组号'}
+        #self.fields['users'].label=u'姓 名'
+        #self.fields['users'].required=False
+
+class XLSFileForm(forms.Form):
+    xls = forms.FileField()
+
+    def __init__(self,*args,**kwargs):
+        super(XLSFileForm,self).__init__(*args,**kwargs)
+        self.fields['xls'].label=u'文 件'
+        self.fields['xls'].error_messages={'required':u'请输入名称'}
+
+class RemoveUsersForm(forms.ModelForm):
+    class Meta:
+        model = GroupListList
+        widgets = {
+            'classid' : forms.SelectMultiple(attrs={'class':'form-control','size':'10','multiple':'multiple'}),
+            #'permission' : forms.CheckboxSelectMultiple(choices=[(x.id,x.name) for x in PermissionList.objects.all()]),
+        }
+
+    def __init__(self,*args,**kwargs):
+        super(RemoveUsersForm,self).__init__(*args,**kwargs)
+        self.fields['classid'].label=u'要删除的用户分组'
+        self.fields['classid'].required=True
+
+
+
+class ChangeUserForm(forms.ModelForm):
+    class Meta:
+        model = User
+        fields = ('email','nickname','sex','birthday')
+        widgets = {
+            #'password': forms.HiddenInput,
+            'email' : forms.TextInput(attrs={'class':'form-control'}),
+            'nickname' : forms.TextInput(attrs={'class':'form-control'}),
+            'sex' : forms.RadioSelect(choices=((u'男', u'男'),(u'女', u'女')),attrs={'class':'list-inline'}),
+            'birthday' : forms.TextInput(attrs={'class':'form-control'}),
+        }
+
+    def __init__(self,*args,**kwargs):
+        super(ChangeUserForm,self).__init__(*args,**kwargs)
+        self.fields['email'].label=u'邮 箱'
+        self.fields['email'].error_messages={'invalid':u'请输入有效邮箱'}
+        self.fields['nickname'].label=u'姓 名'
+        self.fields['nickname'].error_messages={'required':u'请输入姓名'}
+        self.fields['sex'].label=u'性 别'
+        self.fields['sex'].error_messages={'required':u'请选择性别'}
+        self.fields['birthday'].label=u'生 日'
+        self.fields['birthday'].error_messages={'invalid':u'请输入有效的生日'}
+
+
+class AddAdminForm(forms.ModelForm):
+    class Meta:
+        model = User
+        fields = ('username','password','sid','email','nickname','sex','birthday')
+        widgets = {
+            'username' : forms.TextInput(attrs={'class':'form-control'}),
+            'password' : forms.PasswordInput(attrs={'class':'form-control'}),
+            'sid' : forms.TextInput(attrs={'class':'form-control'}),
+            'email' : forms.TextInput(attrs={'class':'form-control'}),
+            'nickname' : forms.TextInput(attrs={'class':'form-control'}),
+            'sex' : forms.RadioSelect(choices=((u'男', u'男'),(u'女', u'女')),attrs={'class':'list-inline'}),
+        }
+
+    def __init__(self,*args,**kwargs):
+        super(AddAdminForm,self).__init__(*args,**kwargs)
+        self.fields['username'].label=u'账 号'
+        self.fields['username'].error_messages={'required':u'请输入账号'}
+        self.fields['password'].label=u'密 码'
+        self.fields['password'].error_messages={'required':u'请输入密码'}
+        self.fields['sid'].label=u'学 号'
+        self.fields['sid'].error_messages={'required':u'请输入学号','invalid':u'请输入有效学号'}
+        self.fields['email'].label=u'邮 箱'
+        self.fields['email'].error_messages={'invalid':u'请输入有效邮箱'}
+        self.fields['nickname'].label=u'姓 名'
+        self.fields['nickname'].error_messages={'required':u'请输入姓名'}
+        self.fields['sex'].label=u'性 别'
+        self.fields['sex'].error_messages={'required':u'请选择性别'}
+        self.fields['birthday'].label=u'生 日'
+        self.fields['birthday'].error_messages={'invalid':u'请输入有效的生日'}
+
+    def clean_password(self):
+        password = self.cleaned_data.get('password')
+        if len(password) < 6:
+            raise forms.ValidationError(u'密码必须大于6位')
+        return password
+
+
+class SignInUserForm(forms.ModelForm):
+    class Meta:
+        model = User
+        fields = ('username','password','sid','classid','email','nickname','sex','birthday')
+        widgets = {
+            'username' : forms.TextInput(attrs={'class':'form-control'}),
+            'password' : forms.PasswordInput(attrs={'class':'form-control'}),
+            'sid' : forms.TextInput(attrs={'class':'form-control'}),
+            'classid' : forms.Select(choices=[(x.name,x.name) for x in GroupList.objects.all()],attrs={'class':'form-control'}),
+            'email' : forms.TextInput(attrs={'class':'form-control'}),
+            'nickname' : forms.TextInput(attrs={'class':'form-control'}),
+            'sex' : forms.RadioSelect(choices=((u'男', u'男'),(u'女', u'女')),attrs={'class':'list-inline'}),
+            'birthday' : forms.TextInput(attrs={'class':'form-control'}),
+        }
+
+    def __init__(self,*args,**kwargs):
+        super(SignInUserForm,self).__init__(*args,**kwargs)
+        self.fields['username'].label=u'账 号'
+        self.fields['username'].error_messages={'required':u'请输入账号'}
+        self.fields['password'].label=u'密 码'
+        self.fields['password'].error_messages={'required':u'请输入密码'}
+        self.fields['sid'].label=u'学 号'
+        self.fields['sid'].error_messages={'required':u'请输入学号','invalid':u'请输入有效学号'}
+        self.fields['classid'].label=u'分 组'
+        self.fields['classid'].error_messages={'required':u'请输入分组号','invalid':u'请输入有效分组号'}
+        self.fields['email'].label=u'邮 箱'
+        self.fields['email'].error_messages={'invalid':u'请输入有效邮箱'}
+        self.fields['nickname'].label=u'姓 名'
+        self.fields['nickname'].error_messages={'required':u'请输入姓名'}
+        self.fields['sex'].label=u'性 别'
+        self.fields['sex'].error_messages={'required':u'请选择性别'}
+        self.fields['birthday'].label=u'生 日'
+        self.fields['birthday'].error_messages={'invalid':u'请输入有效的生日'}
+
+
+    def clean_password(self):
+        password = self.cleaned_data.get('password')
+        if len(password) < 6:
+            raise forms.ValidationError(u'密码必须大于6位')
+        return password
+
+    def clean_sid(self):
+        sid = self.cleaned_data.get('sid')
+        if not str(sid).isdigit():
+            raise forms.ValidationError(u'学号必须为纯数字')
+        return sid

+ 85 - 0
UserManage/models.py

@@ -0,0 +1,85 @@
+#!/usr/bin/env python
+#-*- coding: utf-8 -*-
+
+from django.db import models
+from django.contrib.auth.models import BaseUserManager, AbstractBaseUser
+
+# Create your models here.
+class PermissionList(models.Model):
+    name = models.CharField(max_length=64)
+    url = models.CharField(max_length=255)
+
+    def __unicode__(self):
+        return '%s(%s)' %(self.name,self.url)
+                                              
+class RoleList(models.Model):
+    name = models.CharField(max_length=64)
+    permission = models.ManyToManyField(PermissionList,null=True,blank=True)
+
+    def __unicode__(self):
+        return self.name
+
+class UserManager(BaseUserManager):
+    def create_user(self,sid,classid,username,password=None):
+        if sid==None:
+            raise ValueError('Users must have an student id!')
+        if classid==None:
+            raise ValueError('Users must have an class id!')
+        user = self.model(
+            sid = sid,
+            classid = classid,
+            username = username,
+        )
+
+        user.set_password(password)
+        user.save(using=self._db)
+        return user
+
+    def create_superuser(self,sid,classid,username,password):
+        user = self.create_user(
+            username = username,
+            password = password,
+            classid=classid,
+            sid=sid,
+        )
+
+        user.is_active = True
+        user.is_superuser = True
+        user.save(using=self._db)
+        return user
+
+class GroupList(models.Model):
+    name = models.CharField(max_length=64)
+    classid = models.IntegerField(db_index=True,unique=True)
+    #users = models.ManyToManyField(User,null=True,blank=True)
+
+    def __unicode__(self):
+        return self.name
+
+class GroupListList(models.Model):
+    classid = models.ManyToManyField(GroupList,null=True,blank=True)
+
+
+class User(AbstractBaseUser):
+    username = models.CharField(max_length=40, unique=True, db_index=True)
+    sid = models.IntegerField(unique=True, db_index=True)
+    classid = models.ForeignKey(GroupList,null=True,blank=True)
+    email = models.EmailField(max_length=255, null=True ,blank=True)
+    is_active = models.BooleanField(default=False)
+    is_superuser = models.BooleanField(default=False)
+    nickname = models.CharField(max_length=64, null=True)
+    sex = models.CharField(max_length=2, null=True)
+    role = models.ForeignKey(RoleList,null=True,blank=True)
+    birthday = models.DateField(null=True,blank=True)
+    
+    
+    objects = UserManager()
+    USERNAME_FIELD = 'username'
+    REQUIRED_FIELDS = ['sid','classid']
+
+    def has_perm(self,perm,obj=None):
+        if self.is_active and self.is_superuser:
+            return True
+
+
+

+ 1 - 0
UserManage/templatetags/__init__.py

@@ -0,0 +1 @@
+#NULL

+ 27 - 0
UserManage/templatetags/httpgetargs.py

@@ -0,0 +1,27 @@
+from django import template
+#import urllib,urlparse
+from django.utils.http import urlencode
+register = template.Library()
+
+class HttpGetArgsAddOne(template.Node):
+    def __init__(self, cname,cvalue):
+        self.cname = cname
+        self.cvalue = cvalue
+    def render(self, context):
+        dsrc=context['request'].GET.dict()
+        value=self.cvalue.resolve(context, True)
+        name=self.cname.resolve(context, True)
+        dopt=dict([(name,value)])
+        dsrc.update(dopt)
+        return urlencode(dsrc)
+
+@register.tag(name="HttpGetArgsAddOne")
+def do_HttpGetArgsAddOne(parser, token):
+    try:
+        tag_name,name,value = token.split_contents()
+    except ValueError:
+        msg = '%r tag requires 2 arguments' % token.split_contents()[0]
+        raise template.TemplateSyntaxError(msg)
+    cvalue=parser.compile_filter(value)
+    cname=parser.compile_filter(name)
+    return HttpGetArgsAddOne(cname,cvalue)

+ 41 - 0
UserManage/urls.py

@@ -0,0 +1,41 @@
+from django.conf.urls import patterns, include, url
+
+urlpatterns = patterns('UserManage.views',
+    url(r'^login/$', 'user.LoginUser', name='loginurl'),
+    url(r'^logout/$', 'user.LogoutUser', name='logouturl'),
+    url(r'^signup/$', 'user.SignUp', name='signupurl'),
+
+    url(r'^user/add/$', 'user.AddUser', name='adduserurl'),
+    url(r'^user/addadmin/$', 'user.AddAdmin', name='addadminurl'),
+    url(r'^user/removes/$', 'user.RemoveUsers', name='removesusersurl'),
+    url(r'^user/addxls/$', 'user.XLSFileUser', name='addxlsuserurl'),
+    url(r'^user/list/$', 'user.ListUser', name='listuserurl'),
+    url(r'^user/listnew/$', 'user.ListNewUser', name='listnewuserurl'),
+    url(r'^user/edit/(?P<ID>\d+)/$', 'user.EditUser', name='edituserurl'),
+    url(r'^user/delete/(?P<ID>\d+)/$', 'user.DeleteUser', name='deleteuserurl'),
+    url(r'^user/xlserror/$', 'user.AddXlsError', name='addxlserror'),
+
+    url(r'^user/changepwd/$', 'user.ChangePassword', name='changepasswordurl'),
+    url(r'^user/resetpwd/(?P<ID>\d+)/$', 'user.ResetPassword', name='resetpasswordurl'),
+    url(r'^user/changeinfo/$', 'user.ChangInfo', name='changeuserurl'),
+
+    url(r'^role/add/$', 'role.AddRole', name='addroleurl'),
+    url(r'^role/list/$', 'role.ListRole', name='listroleurl'),
+    url(r'^role/permission/$', 'role.ListPRole', name='listrolepermission'),
+    url(r'^role/edit/(?P<ID>\d+)/$', 'role.EditRole', name='editroleurl'),
+    url(r'^role/delete/(?P<ID>\d+)/$', 'role.DeleteRole', name='deleteroleurl'),
+
+    url(r'^group/add/$', 'group.AddGroup', name='addgroupurl'),
+    url(r'^group/addxls/$', 'group.XLSFileGroup', name='addxlsgroupurl'),
+    url(r'^group/removes/$', 'group.RemoveGroups', name='removegroupsurl'),
+    url(r'^group/list/$', 'group.ListGroup', name='listgroupurl'),
+    url(r'^group/edit/(?P<ID>\d+)/$', 'group.EditGroup', name='editgroupurl'),
+    url(r'^group/delete/(?P<ID>\d+)/$', 'group.DeleteGroup', name='deletegroupurl'),
+
+    url(r'^permission/deny/$', 'permission.NoPermission', name='permissiondenyurl'),
+
+    url(r'^permission/add/$', 'permission.AddPermission', name='addpermissionurl'),
+    url(r'^permission/list/$', 'permission.ListPermission', name='listpermissionurl'),
+    url(r'^permission/edit/(?P<ID>\d+)/$', 'permission.EditPermission', name='editpermissionurl'),
+    url(r'^permission/delete/(?P<ID>\d+)/$', 'permission.DeletePermission', name='deletepermissionurl'),
+)

+ 0 - 0
UserManage/views/__init__.py


+ 131 - 0
UserManage/views/group.py

@@ -0,0 +1,131 @@
+#!/usr/bin/env python
+#-*- coding: utf-8 -*-
+
+from django.core.urlresolvers import reverse
+from django.http import HttpResponse,HttpResponseRedirect
+from django.shortcuts import render_to_response,RequestContext
+from django.contrib.auth.decorators import login_required
+from website.common.CommonPaginator import SelfPaginator
+from UserManage.views.permission import PermissionVerify
+from UserManage.xlsgroups import processxls
+from UserManage.forms import GroupListForm,XLSFileForm,RemoveUsersForm
+from UserManage.models import GroupList
+
+@login_required
+@PermissionVerify()
+def AddGroup(request):
+    if request.method == "POST":
+        form = GroupListForm(request.POST)
+        if form.is_valid():
+            form.save()
+            return HttpResponseRedirect(reverse('listgroupurl'))
+    else:
+        form = GroupListForm()
+
+    kwvars = {
+        'form':form,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/group.add.html',kwvars,RequestContext(request))
+
+@login_required
+@PermissionVerify()
+def ListGroup(request):
+    mList = GroupList.objects.all()
+
+    #分页功能
+    lst = SelfPaginator(request,mList, 20)
+
+    kwvars = {
+        'lPage':lst,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/group.list.html',kwvars,RequestContext(request))
+
+@login_required
+@PermissionVerify()
+def EditGroup(request,ID):
+    iGroup = GroupList.objects.get(id=ID)
+
+    if request.method == "POST":
+        form = GroupListForm(request.POST,instance=iGroup)
+        if form.is_valid():
+            form.save()
+            return HttpResponseRedirect(reverse('listgroupurl'))
+    else:
+        form = GroupListForm(instance=iGroup)
+
+    kwvars = {
+        'ID':ID,
+        'form':form,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/group.edit.html',kwvars,RequestContext(request))
+
+@login_required
+@PermissionVerify()
+def DeleteGroup(request,ID):
+    GroupList.objects.filter(id = ID).delete()
+
+    return HttpResponseRedirect(reverse('listgroupurl'))
+
+@login_required
+@PermissionVerify()
+def XLSFileGroup(request):
+
+    if request.method=='POST':
+        form = XLSFileForm(request.POST,request.FILES)
+        if form.is_valid():
+            try:
+                gdata=processxls(request.FILES['xls'])
+            except Exception,e:
+                kwvars = {'request':request,'xerror':e,}
+                return render_to_response('UserManage/user.addxls.error.html',kwvars,RequestContext(request))
+            try:
+                querysetlist=[]
+                for ud in gdata:
+                    if ud[0]!=0:
+                        querysetlist.append( GroupList(classid=str(ud[0]),name=ud[1]) )
+                GroupList.objects.bulk_create(querysetlist)
+                return HttpResponseRedirect(reverse('listgroupurl'))
+            except Exception,e:
+                kwvars = {'request':request,'xerror':e,}
+                return render_to_response('UserManage/user.addxls.error.html',kwvars,RequestContext(request))
+    else:
+        form = XLSFileForm()
+
+    kwvars = {
+        'form':form,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/group.addxls.html',kwvars,RequestContext(request))
+
+
+@login_required
+@PermissionVerify()
+def RemoveGroups(request):
+    #get_user_model().objects.filter(id = ID).delete()
+    if request.method=='POST':
+        form = RemoveUsersForm(request.POST)
+        if form.is_valid():
+            try:
+                for cid in form.cleaned_data["classid"]:
+                    cid.delete()
+                return HttpResponseRedirect(reverse('listgroupurl'))
+            except Exception,e:
+                kwvars = {'request':request,'xerror':e,}
+                return render_to_response('UserManage/group.remove.error.html',kwvars,RequestContext(request))
+
+    else:
+        form = RemoveUsersForm()
+
+    kwvars = {
+        'form':form,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/group.removegroups.html',kwvars,RequestContext(request))

+ 117 - 0
UserManage/views/permission.py

@@ -0,0 +1,117 @@
+#!/usr/bin/env python
+#-*- coding: utf-8 -*-
+
+from django.core.urlresolvers import reverse
+from django.http import HttpResponse,HttpResponseRedirect
+from django.shortcuts import render_to_response,RequestContext
+from django.contrib.auth.decorators import login_required
+from website.common.CommonPaginator import SelfPaginator
+
+from UserManage.forms import PermissionListForm
+from UserManage.models import User,RoleList,PermissionList
+
+def PermissionVerify():
+    '''权限认证模块,
+        此模块会先判断用户是否是管理员(is_superuser为True),如果是管理员,则具有所有权限,
+        如果不是管理员则获取request.user和request.path两个参数,判断两个参数是否匹配,匹配则有权限,反之则没有。
+    '''
+    def decorator(view_func):
+        def _wrapped_view(request, *args, **kwargs):
+            iUser = User.objects.get(username=request.user)
+
+            if not iUser.is_superuser: #判断用户如果是超级管理员则具有所有权限
+                if not iUser.role: #如果用户无角色,直接返回无权限
+                    return HttpResponseRedirect(reverse('permissiondenyurl'))
+
+                role_permission = RoleList.objects.get(name=iUser.role)
+                role_permission_list = role_permission.permission.all()
+
+                matchUrl = []
+                for x in role_permission_list:
+                    if request.path == x.url or request.path.rstrip('/') == x.url: #精确匹配,判断request.path是否与permission表中的某一条相符
+                        matchUrl.append(x.url)
+                    elif request.path.startswith(x.url): #判断request.path是否以permission表中的某一条url开头
+                        matchUrl.append(x.url)
+                    else:
+                        pass
+
+                print '%s---->matchUrl:%s' %(request.user,str(matchUrl))
+                if len(matchUrl) == 0:
+                    return HttpResponseRedirect(reverse('permissiondenyurl'))
+            else:
+                pass
+
+            return view_func(request, *args, **kwargs)
+        return _wrapped_view
+
+    return decorator
+
+@login_required
+def NoPermission(request):
+
+    kwvars = {
+        'request':request,
+    }
+
+    return render_to_response('UserManage/permission.no.html',kwvars,RequestContext(request))
+
+@login_required
+@PermissionVerify()
+def AddPermission(request):
+    if request.method == "POST":
+        form = PermissionListForm(request.POST)
+        if form.is_valid():
+            form.save()
+            return HttpResponseRedirect(reverse('listpermissionurl'))
+    else:
+        form = PermissionListForm()
+
+    kwvars = {
+        'form':form,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/permission.add.html',kwvars,RequestContext(request))
+
+@login_required
+@PermissionVerify()
+def ListPermission(request):
+    mList = PermissionList.objects.all()
+
+    #分页功能
+    lst = SelfPaginator(request,mList, 20)
+
+    kwvars = {
+        'lPage':lst,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/permission.list.html',kwvars,RequestContext(request))
+
+@login_required
+@PermissionVerify()
+def EditPermission(request,ID):
+    iPermission = PermissionList.objects.get(id=ID)
+
+    if request.method == "POST":
+        form = PermissionListForm(request.POST,instance=iPermission)
+        if form.is_valid():
+            form.save()
+            return HttpResponseRedirect(reverse('listpermissionurl'))
+    else:
+        form = PermissionListForm(instance=iPermission)
+
+    kwvars = {
+        'ID':ID,
+        'form':form,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/permission.edit.html',kwvars,RequestContext(request))
+
+@login_required
+@PermissionVerify()
+def DeletePermission(request,ID):
+    PermissionList.objects.filter(id = ID).delete()
+
+    return HttpResponseRedirect(reverse('listpermissionurl'))

+ 89 - 0
UserManage/views/role.py

@@ -0,0 +1,89 @@
+#!/usr/bin/env python
+#-*- coding: utf-8 -*-
+
+from django.core.urlresolvers import reverse
+from django.http import HttpResponse,HttpResponseRedirect
+from django.shortcuts import render_to_response,RequestContext
+from django.contrib.auth.decorators import login_required
+from website.common.CommonPaginator import SelfPaginator
+from UserManage.views.permission import PermissionVerify
+
+from UserManage.forms import RoleListForm
+from UserManage.models import RoleList
+
+@login_required
+@PermissionVerify()
+def AddRole(request):
+    if request.method == "POST":
+        form = RoleListForm(request.POST)
+        if form.is_valid():
+            form.save()
+            return HttpResponseRedirect(reverse('listroleurl'))
+    else:
+        form = RoleListForm()
+
+    kwvars = {
+        'form':form,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/role.add.html',kwvars,RequestContext(request))
+
+@login_required
+@PermissionVerify()
+def ListRole(request):
+    mList = RoleList.objects.all()
+
+    #分页功能
+    lst = SelfPaginator(request,mList, 20)
+
+    kwvars = {
+        'lPage':lst,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/role.list.html',kwvars,RequestContext(request))
+
+@login_required
+@PermissionVerify()
+def ListPRole(request):
+    mList = RoleList.objects.all()
+
+    #分页功能
+    lst = SelfPaginator(request,mList, 20)
+
+    kwvars = {
+        'lPage':lst,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/role.plist.html',kwvars,RequestContext(request))
+
+
+@login_required
+@PermissionVerify()
+def EditRole(request,ID):
+    iRole = RoleList.objects.get(id=ID)
+
+    if request.method == "POST":
+        form = RoleListForm(request.POST,instance=iRole)
+        if form.is_valid():
+            form.save()
+            return HttpResponseRedirect(reverse('listroleurl'))
+    else:
+        form = RoleListForm(instance=iRole)
+
+    kwvars = {
+        'ID':ID,
+        'form':form,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/role.edit.html',kwvars,RequestContext(request))
+
+@login_required
+@PermissionVerify()
+def DeleteRole(request,ID):
+    RoleList.objects.filter(id = ID).delete()
+
+    return HttpResponseRedirect(reverse('listroleurl'))

+ 352 - 0
UserManage/views/user.py

@@ -0,0 +1,352 @@
+#!/usr/bin/env python
+#-*- coding: utf-8 -*-
+
+from django.core.urlresolvers import reverse
+from django.http import HttpResponse,HttpResponseRedirect
+from django.shortcuts import render_to_response,RequestContext
+from django.contrib.auth.decorators import login_required
+from website.common.CommonPaginator import SelfPaginator
+from website.common.CommonFilter import CommonFilter,FilterCondition
+from UserManage.views.permission import PermissionVerify
+from UserManage.xlsusers import processxls
+from UserManage.models import User,RoleList,GroupList
+import hashlib
+from django.contrib.auth.hashers import make_password
+from django.contrib import auth
+from django.contrib.auth import get_user_model
+from UserManage.forms import LoginUserForm,SignInUserForm,ChangePasswordForm,AddUserForm,EditUserForm,XLSFileForm,RemoveUsersForm,ChangeUserForm,AddAdminForm
+
+def LoginUser(request):
+    '''用户登录view'''
+    if request.user.is_authenticated():
+        return HttpResponseRedirect('/')
+
+    if request.method == 'GET' and request.GET.has_key('next'):
+        next = request.GET['next']
+    else:
+        next = '/'
+
+    if request.method == "POST":
+        form = LoginUserForm(request, data=request.POST)
+        if form.is_valid():
+            auth.login(request, form.get_user())
+            return HttpResponseRedirect(request.POST['next'])
+    else:
+        form = LoginUserForm(request)
+
+    kwvars = {
+        'request':request,
+        'form':form,
+        'next':next,
+    }
+
+    return render_to_response('UserManage/login.html',kwvars,RequestContext(request))
+
+
+def SignUp(request):
+    '''用户注册view'''
+    if request.user.is_authenticated():
+        return HttpResponseRedirect('/')
+
+    if request.method=='POST':
+        form = SignInUserForm(request.POST)
+        if form.is_valid():
+            user = form.save(commit=False)
+            user.set_password(form.cleaned_data['password'])
+            user.role=RoleList.objects.get(name=u'学生')
+            user.is_active = False
+            user.is_superuser = False
+            form.save()
+            return HttpResponseRedirect(reverse('loginurl'))
+    else:
+        form = SignInUserForm()
+
+    kwvars = {
+        'form':form,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/user.signup.html',kwvars,RequestContext(request))
+
+@login_required
+def LogoutUser(request):
+    auth.logout(request)
+    return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
+
+@login_required
+def ChangePassword(request):
+    if request.method=='POST':
+        form = ChangePasswordForm(user=request.user,data=request.POST)
+        if form.is_valid():
+            form.save()
+            return HttpResponseRedirect(reverse('logouturl'))
+    else:
+        form = ChangePasswordForm(user=request.user)
+
+    kwvars = {
+        'form':form,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/password.change.html',kwvars,RequestContext(request))
+
+@login_required
+@PermissionVerify()
+def ListUser(request):
+    mList = get_user_model().objects.all()
+
+    #筛选器
+    classobjs = GroupList.objects.all()
+    allclass=map(lambda x:x.name,classobjs)
+    fco = FilterCondition()
+    fco.addTextContain("sid","编号","sid")
+    fco.addTextContain("name","用户名","username")
+    fco.addTextContain("nick","姓名","nickname")
+    fco.addTextContain("mail","邮箱","email")
+    fco.addMultiChoice("class","班级","classid__name",allclass)
+    fco.addDateRange("bthdy","生日","birthday")
+    fco.addSingleChoice("sex","性别","sex",["男","女"])
+
+    fList = CommonFilter(request,fco,mList)
+    #分页功能
+    lst = SelfPaginator(request,fList, 20)
+
+    kwvars = {
+        'lPage':lst,
+        'request':request,
+        'FilterHTML':fco.RenderHTML(request)
+    }
+
+    return render_to_response('UserManage/user.list.html',kwvars,RequestContext(request))
+
+
+@login_required
+@PermissionVerify()
+def ListNewUser(request):
+    mList = get_user_model().objects.filter(is_active=False)
+    #筛选器
+    classobjs = GroupList.objects.all()
+    allclass=map(lambda x:x.name,classobjs)
+    fco = FilterCondition()
+    fco.addTextContain("sid","编号","sid")
+    fco.addTextContain("name","用户名","username")
+    fco.addTextContain("nick","姓名","nickname")
+    fco.addTextContain("mail","邮箱","email")
+    fco.addMultiChoice("class","班级","classid__name",allclass)
+    fco.addDateRange("bthdy","生日","birthday")
+    fco.addSingleChoice("sex","性别","sex",["男","女"])
+
+    fList = CommonFilter(request,fco,mList)
+    #分页功能
+    lst = SelfPaginator(request,fList, 20)
+
+    kwvars = {
+        'lPage':lst,
+        'request':request,
+        'FilterHTML':fco.RenderHTML(request)
+    }
+
+    return render_to_response('UserManage/user.listnew.html',kwvars,RequestContext(request))
+
+@login_required
+@PermissionVerify()
+def AddUser(request):
+
+    if request.method=='POST':
+        form = AddUserForm(request.POST)
+        if form.is_valid():
+            user = form.save(commit=False)
+            user.set_password(form.cleaned_data['password'])
+
+            form.save()
+            return HttpResponseRedirect(reverse('listuserurl'))
+    else:
+        form = AddUserForm()
+
+    kwvars = {
+        'form':form,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/user.add.html',kwvars,RequestContext(request))
+
+
+@login_required
+@PermissionVerify()
+def AddAdmin(request):
+
+    if request.method=='POST':
+        form = AddAdminForm(request.POST)
+        if form.is_valid():
+            user = form.save(commit=False)
+            user.set_password(form.cleaned_data['password'])
+            user.role=RoleList.objects.get(name=u'管理员')
+            user.is_active = True
+            user.is_superuser = True
+            form.save()
+            return HttpResponseRedirect(reverse('listuserurl'))
+    else:
+        form = AddAdminForm()
+
+    kwvars = {
+        'form':form,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/user.addadmin.html',kwvars,RequestContext(request))
+
+@login_required
+@PermissionVerify()
+def EditUser(request,ID):
+    user = get_user_model().objects.get(id = ID)
+
+    if request.method=='POST':
+        form = EditUserForm(request.POST,instance=user)
+        if form.is_valid():
+            form.save()
+            return HttpResponseRedirect(reverse('listuserurl'))
+    else:
+        form = EditUserForm(instance=user
+        )
+
+    kwvars = {
+        'ID':ID,
+        'form':form,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/user.edit.html',kwvars,RequestContext(request))
+
+@login_required
+@PermissionVerify()
+def DeleteUser(request,ID):
+    if ID == '1':
+        return HttpResponse(u'超级管理员不允许删除!!!')
+    else:
+        get_user_model().objects.filter(id = ID).delete()
+
+    return HttpResponseRedirect(reverse('listuserurl'))
+
+@login_required
+@PermissionVerify()
+def ResetPassword(request,ID):
+    user = get_user_model().objects.get(id = ID)
+
+    newpassword = get_user_model().objects.make_random_password(length=10,allowed_chars='abcdefghjklmnpqrstuvwxyABCDEFGHJKLMNPQRSTUVWXY3456789')
+    print '====>ResetPassword:%s-->%s' %(user.username,newpassword)
+    user.set_password(newpassword)
+    user.save()
+
+    kwvars = {
+        'object':user,
+        'newpassword':newpassword,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/password.reset.html',kwvars,RequestContext(request))
+
+@login_required
+def AddXlsError(request):
+
+    kwvars = {
+        'request':request,
+    }
+
+    return render_to_response('UserManage/user.addxls.error.html',kwvars,RequestContext(request))
+
+@login_required
+@PermissionVerify()
+def XLSFileUser(request):
+
+    if request.method=='POST':
+        form = XLSFileForm(request.POST,request.FILES)
+        if form.is_valid():
+            try:
+                userdata=processxls(request.FILES['xls'])
+            except Exception,e:
+                kwvars = {'request':request,'xerror':e,}
+                return render_to_response('UserManage/user.addxls.error.html',kwvars,RequestContext(request))
+            try:
+                studentrole=RoleList.objects.get(name = u'学生')
+                querysetlist=[]
+                for ud in userdata:
+                    if ud[0]!=0:
+                        t_user=User(username=str(ud[0]),
+                                 sid=ud[0],
+                                 classid=GroupList.objects.get(classid = ud[4]),
+                                 is_active=True,
+                                 nickname=ud[1],
+                                 sex=ud[2],
+                                 birthday=ud[5],
+                                 password=make_password(ud[3], None, "unsalted_md5"),
+                                 role=studentrole)
+                        #t_user.set_password(ud[3])
+                        querysetlist.append(t_user)
+                User.objects.bulk_create(querysetlist)
+                return HttpResponseRedirect(reverse('listuserurl'))
+            except Exception,e:
+                kwvars = {'request':request,'xerror':e,}
+                return render_to_response('UserManage/user.addxls.error.html',kwvars,RequestContext(request))
+    else:
+        form = XLSFileForm()
+
+    kwvars = {
+        'form':form,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/user.addxls.html',kwvars,RequestContext(request))
+
+
+@login_required
+@PermissionVerify()
+def RemoveUsers(request):
+    #get_user_model().objects.filter(id = ID).delete()
+    if request.method=='POST':
+        form = RemoveUsersForm(request.POST)
+        if form.is_valid():
+            try:
+                #classid = GroupList.objects.get(classid = form.cleaned_data["classid"])
+                for cid in form.cleaned_data["classid"]:
+                    users = get_user_model().objects.filter(classid = cid)
+                
+                    for i in users:
+                        if i.id == 1:
+                            raise Exception,u'超级管理员不允许删除!!!'
+                    users.delete()
+                return HttpResponseRedirect(reverse('listuserurl'))
+            except Exception,e:
+                kwvars = {'request':request,'xerror':e,}
+                return render_to_response('UserManage/user.remove.error.html',kwvars,RequestContext(request))
+
+    else:
+        form = RemoveUsersForm()
+
+    kwvars = {
+        'form':form,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/user.removeusers.html',kwvars,RequestContext(request))
+
+
+@login_required
+def ChangInfo(request):
+    user = request.user
+
+    if request.method=='POST':
+        form = ChangeUserForm(request.POST,instance=user)
+        if form.is_valid():
+            form.save()
+            return HttpResponseRedirect('/')
+    else:
+        form = ChangeUserForm(instance=user
+        )
+
+    kwvars = {
+        'ID':user.id,
+        'form':form,
+        'request':request,
+    }
+
+    return render_to_response('UserManage/user.change.html',kwvars,RequestContext(request))

+ 39 - 0
UserManage/xlsgroups.py

@@ -0,0 +1,39 @@
+import xlrd
+import datetime
+import uuid
+import os
+
+
+def process_cell(table,i,j):
+  _temp=table.cell(i,j)
+  if _temp.ctype==1:
+    return _temp.value
+  if _temp.ctype==2:
+    return str(int(_temp.value))
+  #raise "Error xls!"
+
+def processxls(FILE):
+  BASE_DIR = os.path.dirname(os.path.dirname(__file__))
+  xlsname = os.path.join(BASE_DIR, 'uploads', '%s.xls' % str(uuid.uuid4()))
+  destination = open(xlsname,'wb')
+  for chunk in FILE.chunks(): 
+      destination.write(chunk)
+  destination.close()
+  data = xlrd.open_workbook(xlsname)
+  table = data.sheet_by_index(0)
+  head = table.row_values(0)
+  assert len(head)==2
+
+
+
+
+  rets=[]
+  for i in range(table.nrows-1):
+    col = table.row_values(i+1)
+    classid=str(int(col[0]))
+    name=process_cell(table,i+1,1)
+
+
+    rets.append((classid,name))
+  return rets
+

+ 57 - 0
UserManage/xlsusers.py

@@ -0,0 +1,57 @@
+import xlrd
+import datetime
+import uuid
+import os
+
+
+def process_cell(table,i,j):
+  _temp=table.cell(i,j)
+  if _temp.ctype==1:
+    return _temp.value
+  if _temp.ctype==2:
+    return str(int(_temp.value))
+  #raise "Error xls!"
+
+def processxls(FILE):
+  BASE_DIR = os.path.dirname(os.path.dirname(__file__))
+  xlsname = os.path.join(BASE_DIR, 'uploads', '%s.xls' % str(uuid.uuid4()))
+  destination = open(xlsname,'wb')
+  for chunk in FILE.chunks(): 
+      destination.write(chunk)
+  destination.close()
+  data = xlrd.open_workbook(xlsname)
+  table = data.sheet_by_index(0)
+  head = table.row_values(0)
+  assert len(head)==6
+  assert head[0].strip()==u'\u5b66\u53f7'
+  assert head[1].strip()==u'\u59d3\u540d'
+  assert head[2].strip()==u'\u6027\u522b'
+  assert head[3].strip()==u'\u5bc6\u7801'
+  assert head[4].strip()==u'\u5206\u7ec4\u53f7'
+  assert head[5].strip()==u'\u751f\u65e5'
+
+
+
+  rets=[]
+  for i in range(table.nrows-1):
+    col = table.row_values(i+1)
+    sid=str(int(col[0]))
+    name=process_cell(table,i+1,1)
+    sex=col[2]
+    password=process_cell(table,i+1,3)
+    cid=str(int(col[4]))
+
+    if table.cell(i+1,5).ctype==3:
+      birthday = datetime.date(*xlrd.xldate_as_tuple(table.cell(i+1,5).value,data.datemode)[:3])
+    else:
+      try:
+        birthday = datetime.datetime.strptime(process_cell(table,i+1,5), "%Y-%m-%d").date()
+      except:
+        try:
+          birthday = datetime.datetime.strptime(process_cell(table,i+1,5), "%Y%m%d").date()
+        except:
+          pass
+          #raise "Error xls!"
+    rets.append((sid,name,sex,password,cid,birthday))
+  return rets
+

+ 4 - 1
swyzxwb_photovote/settings.py

@@ -30,12 +30,15 @@ ALLOWED_HOSTS = []
 # Application definition
 
 INSTALLED_APPS = (
-    'django.contrib.admin',
+    #'django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
+    'south',
+    'bootstrap3',
+    'UserManage',
 )
 
 MIDDLEWARE_CLASSES = (

+ 10 - 7
swyzxwb_photovote/urls.py

@@ -1,12 +1,15 @@
 from django.conf.urls import patterns, include, url
 
-from django.contrib import admin
-admin.autodiscover()
+from django.conf import settings
+from swyzxwb_photovote.views import *
 
-urlpatterns = patterns('',
-    # Examples:
-    # url(r'^$', 'swyzxwb_photovote.views.home', name='home'),
-    # url(r'^blog/', include('blog.urls')),
+#from django.contrib import admin
+#admin.autodiscover()
 
-    url(r'^admin/', include(admin.site.urls)),
+urlpatterns = patterns('',
+    url(r'^$',Home),
+    url(r'^admin/$',Admin),
+    url(r'^accounts/',include('UserManage.urls' )),
+    #static
+    url(r'^static/(?P<path>.*)$', 'django.views.static.serve', { 'document_root': settings.STATICFILES_DIRS[0],}),
 )

+ 20 - 0
swyzxwb_photovote/views.py

@@ -0,0 +1,20 @@
+#!/usr/bin/env python
+#-*- coding: utf-8 -*-
+
+from django.contrib.auth.decorators import login_required
+from django.http import HttpResponse,HttpResponseRedirect
+from django.shortcuts import render_to_response,RequestContext
+from UserManage.views.permission import PermissionVerify
+from msgboard.models import LeaveMsg,PostMsg
+from counsel.models import BookInfo
+from django.contrib.auth import get_user_model
+from ExamPage.models import ExamProject,ExamPaper,UserRecord
+
+@login_required
+@PermissionVerify()
+def Admin(request):
+	return render_to_response('admin.html',kwvars,RequestContext(request))
+
+@login_required
+def Home(request):
+	return render_to_response('home.html',locals(),RequestContext(request))

+ 55 - 0
templates/UserManage/group.add.html

@@ -0,0 +1,55 @@
+{% 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>
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "addgroupurl" as theaddgroupurl %}
+            <a class="btn btn-default {%if request.path = theaddgroupurl%} active {%endif%}" href={{ theaddgroupurl }}><span class="glyphicon glyphicon-edit"></span>新建分组</a>
+            {% url "listgroupurl" as thelistgroupurl %}
+            <a class="btn btn-default {%if request.path = thelistgroupurl%} active {%endif%}" href={{ thelistgroupurl }}><span class="glyphicon glyphicon-list"></span>分组列表</a>
+            {% url "addxlsgroupurl" as theaddxlsgroupurl %}
+            <a class="btn btn-default {%if request.path = theaddxlsgroupurl%} active {%endif%}" href={{ theaddxlsgroupurl }}><span class="glyphicon glyphicon-list"></span>批量导入</a>
+            {% url "removegroupsurl" as theremovegroupsurl %}
+            <a class="btn btn-default {%if request.path = theremovegroupsurl%} active {%endif%}" href={{ theremovegroupsurl }}><span class="glyphicon glyphicon-list"></span>批量删除</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <form class="form-horizontal" role="form" action={% url "addgroupurl" %} method="POST" >
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-1">{{item.label}}</label>
+                <div class="col-md-2">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-1 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="form-group">
+            <div class="col-md-offset-1 col-md-10">
+                <button type="submit" class="btn btn-danger btn-sm">新 增</button>
+            </div>
+        </div>
+
+    </form>
+
+{% endblock %}

+ 46 - 0
templates/UserManage/group.add.html.bak

@@ -0,0 +1,46 @@
+{% extends "base.html" %}
+
+{% block title %}
+    Add Group
+{% endblock %}
+
+{% block content %}
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "adduserurl" as theadduserurl %}
+            <a class="btn btn-default {%if request.path = theadduserurl%} active {%endif%}" href={{ theadduserurl }}><span class="glyphicon glyphicon-edit"></span>新建用户</a>
+            {% url "listuserurl" as thelistuserurl %}
+            <a class="btn btn-default {%if request.path = thelistuserurl%} active {%endif%}" href={{ thelistuserurl }}><span class="glyphicon glyphicon-list"></span>用户列表</a>
+            {% url "addxlsuserurl" as theaddxlsuserurl %}
+            <a class="btn btn-default {%if request.path = theaddxlsuserurl%} active {%endif%}" href={{ theaddxlsuserurl }}><span class="glyphicon glyphicon-list"></span>批量导入</a>
+            {% url "removegroupsurl" as theremovegroupsurl %}
+            <a class="btn btn-default {%if request.path = theremovegroupsurl%} active {%endif%}" href={{ theremovegroupsurl }}><span class="glyphicon glyphicon-list"></span>批量删除</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <form class="form-horizontal" role="form" action={% url "addgroupurl" %} method="POST" >
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-1">{{item.label}}</label>
+                <div class="col-md-2">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-1 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="form-group">
+            <div class="col-md-offset-1 col-md-10">
+                <button type="submit" class="btn btn-danger btn-sm">新 增</button>
+            <div>
+        </div>
+
+    </form>
+
+{% endblock %}

+ 45 - 0
templates/UserManage/group.addxls.error.html

@@ -0,0 +1,45 @@
+{% 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>
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "addgroupurl" as theaddgroupurl %}
+            <a class="btn btn-default {%if request.path = theaddgroupurl%} active {%endif%}" href={{ theaddgroupurl }}><span class="glyphicon glyphicon-edit"></span>新建分组</a>
+            {% url "listgroupurl" as thelistgroupurl %}
+            <a class="btn btn-default {%if request.path = thelistgroupurl%} active {%endif%}" href={{ thelistgroupurl }}><span class="glyphicon glyphicon-list"></span>分组列表</a>
+            {% url "addxlsgroupurl" as theaddxlsgroupurl %}
+            <a class="btn btn-default {%if request.path = theaddxlsgroupurl%} active {%endif%}" href={{ theaddxlsgroupurl }}><span class="glyphicon glyphicon-list"></span>批量导入</a>
+            {% url "removegroupsurl" as theremovegroupsurl %}
+            <a class="btn btn-default {%if request.path = theremovegroupsurl%} active {%endif%}" href={{ theremovegroupsurl }}><span class="glyphicon glyphicon-list"></span>批量删除</a>
+        </div>
+    </div>
+
+    <hr/>
+
+
+	<div class="container theme-showcase" role="main">
+	<center>
+	<h3>导入数据失败,请检查xls是否符合格式!</h3>
+      <div class="alert alert-danger" role="alert">
+        <strong>错误信息: </strong>{{xerror}}
+      </div>
+	</center> 
+	</div>
+
+{% endblock %}
+
+
+

+ 36 - 0
templates/UserManage/group.addxls.error.html.bak

@@ -0,0 +1,36 @@
+{% extends "base.html" %}
+
+{% block title %}
+    Add User
+{% endblock %}
+
+{% block content %}
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "adduserurl" as theadduserurl %}
+            <a class="btn btn-default {%if request.path = theadduserurl%} active {%endif%}" href={{ theadduserurl }}><span class="glyphicon glyphicon-edit"></span>新建用户</a>
+            {% url "listuserurl" as thelistuserurl %}
+            <a class="btn btn-default {%if request.path = thelistuserurl%} active {%endif%}" href={{ thelistuserurl }}><span class="glyphicon glyphicon-list"></span>用户列表</a>
+            {% url "addxlsuserurl" as theaddxlsuserurl %}
+            <a class="btn btn-default {%if request.path = theaddxlsuserurl%} active {%endif%}" href={{ theaddxlsuserurl }}><span class="glyphicon glyphicon-list"></span>批量导入</a>
+            {% url "removegroupsurl" as theremovegroupsurl %}
+            <a class="btn btn-default {%if request.path = theremovegroupsurl%} active {%endif%}" href={{ theremovegroupsurl }}><span class="glyphicon glyphicon-list"></span>批量删除</a>
+        </div>
+    </div>
+
+    <hr/>
+
+
+	<div class="container theme-showcase" role="main">
+	<center>
+	<h3>导入数据失败,请检查xls是否符合格式!</h3>
+      <div class="alert alert-danger" role="alert">
+        <strong>错误信息: </strong>{{xerror}}
+      </div>
+	</center> 
+	</div>
+
+{% endblock %}
+
+
+

+ 55 - 0
templates/UserManage/group.addxls.html

@@ -0,0 +1,55 @@
+{% 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>
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "addgroupurl" as theaddgroupurl %}
+            <a class="btn btn-default {%if request.path = theaddgroupurl%} active {%endif%}" href={{ theaddgroupurl }}><span class="glyphicon glyphicon-edit"></span>新建分组</a>
+            {% url "listgroupurl" as thelistgroupurl %}
+            <a class="btn btn-default {%if request.path = thelistgroupurl%} active {%endif%}" href={{ thelistgroupurl }}><span class="glyphicon glyphicon-list"></span>分组列表</a>
+            {% url "addxlsgroupurl" as theaddxlsgroupurl %}
+            <a class="btn btn-default {%if request.path = theaddxlsgroupurl%} active {%endif%}" href={{ theaddxlsgroupurl }}><span class="glyphicon glyphicon-list"></span>批量导入</a>
+            {% url "removegroupsurl" as theremovegroupsurl %}
+            <a class="btn btn-default {%if request.path = theremovegroupsurl%} active {%endif%}" href={{ theremovegroupsurl }}><span class="glyphicon glyphicon-list"></span>批量删除</a>
+        </div>
+    </div>
+
+    <hr/>
+	<h2 class="col-md-offset-2">批量导入分组</h2>
+	<br/>
+	<h4 class="col-md-offset-1">请导入符合格式的XLS文件</h4>
+	<h4 class="col-md-offset-1">XLS格式模板<a href='/static/class.xls'>下载</a></h4>
+	<hr/>
+    <form class="form-horizontal" role="form" action={% url "addxlsgroupurl" %} method="POST" enctype="multipart/form-data">
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-2">{{item.label}}</label>
+                <div class="col-md-2">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-2 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="col-md-offset-2">
+                <button type="submit" class="btn btn-danger btn-sm">导 入</button>
+        </div>
+    </form>
+{% endblock %}

+ 44 - 0
templates/UserManage/group.addxls.html.bak

@@ -0,0 +1,44 @@
+{% extends "base.html" %}
+
+{% block title %}
+    Add User
+{% endblock %}
+
+{% block content %}
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "adduserurl" as theadduserurl %}
+            <a class="btn btn-default {%if request.path = theadduserurl%} active {%endif%}" href={{ theadduserurl }}><span class="glyphicon glyphicon-edit"></span>新建用户</a>
+            {% url "listuserurl" as thelistuserurl %}
+            <a class="btn btn-default {%if request.path = thelistuserurl%} active {%endif%}" href={{ thelistuserurl }}><span class="glyphicon glyphicon-list"></span>用户列表</a>
+            {% url "addxlsuserurl" as theaddxlsuserurl %}
+            <a class="btn btn-default {%if request.path = theaddxlsuserurl%} active {%endif%}" href={{ theaddxlsuserurl }}><span class="glyphicon glyphicon-list"></span>批量导入</a>
+            {% url "removegroupsurl" as theremovegroupsurl %}
+            <a class="btn btn-default {%if request.path = theremovegroupsurl%} active {%endif%}" href={{ theremovegroupsurl }}><span class="glyphicon glyphicon-list"></span>批量删除</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <form class="form-horizontal" role="form" action={% url "addxlsgroupurl" %} method="POST" enctype="multipart/form-data">
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-1">{{item.label}}</label>
+                <div class="col-md-2">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-1 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="form-group">
+            <div class="col-md-offset-1 col-md-10">
+                <button type="submit" class="btn btn-danger btn-sm">导 入</button>
+            <div>
+        </div>
+    </form>
+{% endblock %}

+ 56 - 0
templates/UserManage/group.edit.html

@@ -0,0 +1,56 @@
+{% 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>
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "addgroupurl" as theaddgroupurl %}
+            <a class="btn btn-default {%if request.path = theaddgroupurl%} active {%endif%}" href={{ theaddgroupurl }}><span class="glyphicon glyphicon-edit"></span>新建分组</a>
+            {% url "listgroupurl" as thelistgroupurl %}
+            <a class="btn btn-default {%if request.path = thelistgroupurl%} active {%endif%}" href={{ thelistgroupurl }}><span class="glyphicon glyphicon-list"></span>分组列表</a>
+            {% url "addxlsgroupurl" as theaddxlsgroupurl %}
+            <a class="btn btn-default {%if request.path = theaddxlsgroupurl%} active {%endif%}" href={{ theaddxlsgroupurl }}><span class="glyphicon glyphicon-list"></span>批量导入</a>
+            {% url "removegroupsurl" as theremovegroupsurl %}
+            <a class="btn btn-default {%if request.path = theremovegroupsurl%} active {%endif%}" href={{ theremovegroupsurl }}><span class="glyphicon glyphicon-list"></span>批量删除</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <form class="form-horizontal" role="form" action={% url "editgroupurl" ID %} method="POST" >
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-1">{{item.label}}</label>
+                <div class="col-md-2">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-1 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="form-group">
+            <div class="col-md-offset-1 col-md-10">
+                <button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('确认更新吗?')">更 新</button>
+            </div>
+        </div>
+
+    </form>
+
+
+{% endblock %}

+ 47 - 0
templates/UserManage/group.edit.html.bak

@@ -0,0 +1,47 @@
+{% extends "base.html" %}
+
+{% block title %}
+    group Edit
+{% endblock %}
+
+{% block content %}
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "adduserurl" as theadduserurl %}
+            <a class="btn btn-default {%if request.path = theadduserurl%} active {%endif%}" href={{ theadduserurl }}><span class="glyphicon glyphicon-edit"></span>新建用户</a>
+            {% url "listuserurl" as thelistuserurl %}
+            <a class="btn btn-default {%if request.path = thelistuserurl%} active {%endif%}" href={{ thelistuserurl }}><span class="glyphicon glyphicon-list"></span>用户列表</a>
+            {% url "addxlsuserurl" as theaddxlsuserurl %}
+            <a class="btn btn-default {%if request.path = theaddxlsuserurl%} active {%endif%}" href={{ theaddxlsuserurl }}><span class="glyphicon glyphicon-list"></span>批量导入</a>
+            {% url "removegroupsurl" as theremovegroupsurl %}
+            <a class="btn btn-default {%if request.path = theremovegroupsurl%} active {%endif%}" href={{ theremovegroupsurl }}><span class="glyphicon glyphicon-list"></span>批量删除</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <form class="form-horizontal" role="form" action={% url "editgroupurl" ID %} method="POST" >
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-1">{{item.label}}</label>
+                <div class="col-md-2">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-1 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="form-group">
+            <div class="col-md-offset-1 col-md-10">
+                <button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('确认更新吗?')">更 新</button>
+            <div>
+        </div>
+
+    </form>
+
+
+{% endblock %}

+ 54 - 0
templates/UserManage/group.list.html

@@ -0,0 +1,54 @@
+{% 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>
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "addgroupurl" as theaddgroupurl %}
+            <a class="btn btn-default {%if request.path = theaddgroupurl%} active {%endif%}" href={{ theaddgroupurl }}><span class="glyphicon glyphicon-edit"></span>新建分组</a>
+            {% url "listgroupurl" as thelistgroupurl %}
+            <a class="btn btn-default {%if request.path = thelistgroupurl%} active {%endif%}" href={{ thelistgroupurl }}><span class="glyphicon glyphicon-list"></span>分组列表</a>
+            {% url "addxlsgroupurl" as theaddxlsgroupurl %}
+            <a class="btn btn-default {%if request.path = theaddxlsgroupurl%} active {%endif%}" href={{ theaddxlsgroupurl }}><span class="glyphicon glyphicon-list"></span>批量导入</a>
+            {% url "removegroupsurl" as theremovegroupsurl %}
+            <a class="btn btn-default {%if request.path = theremovegroupsurl%} active {%endif%}" href={{ theremovegroupsurl }}><span class="glyphicon glyphicon-list"></span>批量删除</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <table class="table table-hover table-striped  table-bordered table-condensed">
+        <tr>
+        	<th>分组ID</th>
+            <th>分组名称</th>
+            <th>操作</th>
+        </tr>
+
+        {% for i in lPage %}
+            <tr style="font-size: 13px;">
+            	<td>{{ i.classid }} </td>
+                <td>{{ i.name }} </td>
+
+                <td>
+                    <a href={% url "editgroupurl" i.id %} onclick="return confirm('确认编辑分组吗??')"><span class="glyphicon glyphicon-edit btn-xs"></span></a>
+                    <a href={% url "deletegroupurl" i.id %} onclick="return confirm('确认删除分组吗??')"><span class="glyphicon glyphicon-trash btn-xs"></span></a>
+                </td>
+            </tr>
+        {% endfor %}
+
+    </table>
+
+    {% include "common/paginator.html" %}
+{% endblock %}

+ 45 - 0
templates/UserManage/group.list.html.bak

@@ -0,0 +1,45 @@
+{% extends "base.html" %}
+
+{% block title %}
+    group List
+{% endblock %}
+
+{% block content %}
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "adduserurl" as theadduserurl %}
+            <a class="btn btn-default {%if request.path = theadduserurl%} active {%endif%}" href={{ theadduserurl }}><span class="glyphicon glyphicon-edit"></span>新建用户</a>
+            {% url "listuserurl" as thelistuserurl %}
+            <a class="btn btn-default {%if request.path = thelistuserurl%} active {%endif%}" href={{ thelistuserurl }}><span class="glyphicon glyphicon-list"></span>用户列表</a>
+            {% url "addxlsuserurl" as theaddxlsuserurl %}
+            <a class="btn btn-default {%if request.path = theaddxlsuserurl%} active {%endif%}" href={{ theaddxlsuserurl }}><span class="glyphicon glyphicon-list"></span>批量导入</a>
+            {% url "removegroupsurl" as theremovegroupsurl %}
+            <a class="btn btn-default {%if request.path = theremovegroupsurl%} active {%endif%}" href={{ theremovegroupsurl }}><span class="glyphicon glyphicon-list"></span>批量删除</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <table class="table table-hover table-striped  table-bordered table-condensed">
+        <tr>
+        	<th>分组ID</th>
+            <th>分组名称</th>
+            <th>操作</th>
+        </tr>
+
+        {% for i in lPage %}
+            <tr style="font-size: 13px;">
+            	<td>{{ i.classid }} </td>
+                <td>{{ i.name }} </td>
+
+                <td>
+                    <a href={% url "editgroupurl" i.id %} onclick="return confirm('确认编辑分组吗??')"><span class="glyphicon glyphicon-edit btn-xs"></span></a>
+                    <a href={% url "deletegroupurl" i.id %} onclick="return confirm('确认删除分组吗??')"><span class="glyphicon glyphicon-trash btn-xs"></span></a>
+                </td>
+            </tr>
+        {% endfor %}
+
+    </table>
+
+    {% include "common/paginator.html" %}
+{% endblock %}

+ 45 - 0
templates/UserManage/group.remove.error.html

@@ -0,0 +1,45 @@
+{% 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>
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "addgroupurl" as theaddgroupurl %}
+            <a class="btn btn-default {%if request.path = theaddgroupurl%} active {%endif%}" href={{ theaddgroupurl }}><span class="glyphicon glyphicon-edit"></span>新建分组</a>
+            {% url "listgroupurl" as thelistgroupurl %}
+            <a class="btn btn-default {%if request.path = thelistgroupurl%} active {%endif%}" href={{ thelistgroupurl }}><span class="glyphicon glyphicon-list"></span>分组列表</a>
+            {% url "addxlsgroupurl" as theaddxlsgroupurl %}
+            <a class="btn btn-default {%if request.path = theaddxlsgroupurl%} active {%endif%}" href={{ theaddxlsgroupurl }}><span class="glyphicon glyphicon-list"></span>批量导入</a>
+            {% url "removegroupsurl" as theremovegroupsurl %}
+            <a class="btn btn-default {%if request.path = theremovegroupsurl%} active {%endif%}" href={{ theremovegroupsurl }}><span class="glyphicon glyphicon-list"></span>批量删除</a>
+        </div>
+    </div>
+
+    <hr/>
+
+
+	<div class="container theme-showcase" role="main">
+	<center>
+	<h3>批量删除用户错误!</h3>
+      <div class="alert alert-danger" role="alert">
+        <strong>错误信息: </strong>{{xerror}}
+      </div>
+	</center> 
+	</div>
+
+{% endblock %}
+
+
+

+ 36 - 0
templates/UserManage/group.remove.error.html.bak

@@ -0,0 +1,36 @@
+{% extends "base.html" %}
+
+{% block title %}
+    Add User
+{% endblock %}
+
+{% block content %}
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "adduserurl" as theadduserurl %}
+            <a class="btn btn-default {%if request.path = theadduserurl%} active {%endif%}" href={{ theadduserurl }}><span class="glyphicon glyphicon-edit"></span>新建用户</a>
+            {% url "listuserurl" as thelistuserurl %}
+            <a class="btn btn-default {%if request.path = thelistuserurl%} active {%endif%}" href={{ thelistuserurl }}><span class="glyphicon glyphicon-list"></span>用户列表</a>
+            {% url "addxlsuserurl" as theaddxlsuserurl %}
+            <a class="btn btn-default {%if request.path = theaddxlsuserurl%} active {%endif%}" href={{ theaddxlsuserurl }}><span class="glyphicon glyphicon-list"></span>批量导入</a>
+            {% url "removegroupsurl" as theremovegroupsurl %}
+            <a class="btn btn-default {%if request.path = theremovegroupsurl%} active {%endif%}" href={{ theremovegroupsurl }}><span class="glyphicon glyphicon-list"></span>批量删除</a>
+        </div>
+    </div>
+
+    <hr/>
+
+
+	<div class="container theme-showcase" role="main">
+	<center>
+	<h3>批量删除用户错误!</h3>
+      <div class="alert alert-danger" role="alert">
+        <strong>错误信息: </strong>{{xerror}}
+      </div>
+	</center> 
+	</div>
+
+{% endblock %}
+
+
+

+ 68 - 0
templates/UserManage/group.removegroups.html

@@ -0,0 +1,68 @@
+{% extends "base.html" %}
+
+{% block title %}
+    批量删除
+{% endblock %}
+
+{% block head %}
+    <script src="/static/js/jquery.bootstrap-duallistbox.js"></script>
+    <link rel="stylesheet" type="text/css" href="/static/css/bootstrap-duallistbox.css">
+{% 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>
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "addgroupurl" as theaddgroupurl %}
+            <a class="btn btn-default {%if request.path = theaddgroupurl%} active {%endif%}" href={{ theaddgroupurl }}><span class="glyphicon glyphicon-edit"></span>新建分组</a>
+            {% url "listgroupurl" as thelistgroupurl %}
+            <a class="btn btn-default {%if request.path = thelistgroupurl%} active {%endif%}" href={{ thelistgroupurl }}><span class="glyphicon glyphicon-list"></span>分组列表</a>
+            {% url "addxlsgroupurl" as theaddxlsgroupurl %}
+            <a class="btn btn-default {%if request.path = theaddxlsgroupurl%} active {%endif%}" href={{ theaddxlsgroupurl }}><span class="glyphicon glyphicon-list"></span>批量导入</a>
+            {% url "removegroupsurl" as theremovegroupsurl %}
+            <a class="btn btn-default {%if request.path = theremovegroupsurl%} active {%endif%}" href={{ theremovegroupsurl }}><span class="glyphicon glyphicon-list"></span>批量删除</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <form class="form-horizontal" role="form" action={% url "removegroupsurl" %} method="POST" enctype="multipart/form-data">
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-1">{{item.label}}</label>
+                <div class="col-md-11">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-1 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="form-group">
+            <div class="col-md-offset-1 col-md-10">
+                <button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('确认批量删除吗?')">批量删除</button>
+            </div>
+        </div>
+
+    </form>
+    
+    <script>
+        var demo1 = $('select[name="classid"]').bootstrapDualListbox({
+              nonSelectedListLabel: '可选择分组',
+              selectedListLabel: '已选择分组',
+              preserveSelectionOnMove: 'moved',
+              moveOnSelect: false,
+        });
+    </script>
+{% endblock %}

+ 59 - 0
templates/UserManage/group.removegroups.html.bak

@@ -0,0 +1,59 @@
+{% extends "base.html" %}
+
+{% block title %}
+    Add User
+{% endblock %}
+
+{% block head %}
+    <script src="/static/js/jquery.bootstrap-duallistbox.js"></script>
+    <link rel="stylesheet" type="text/css" href="/static/css/bootstrap-duallistbox.css">
+{% endblock %}
+
+{% block content %}
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "adduserurl" as theadduserurl %}
+            <a class="btn btn-default {%if request.path = theadduserurl%} active {%endif%}" href={{ theadduserurl }}><span class="glyphicon glyphicon-edit"></span>新建用户</a>
+            {% url "listuserurl" as thelistuserurl %}
+            <a class="btn btn-default {%if request.path = thelistuserurl%} active {%endif%}" href={{ thelistuserurl }}><span class="glyphicon glyphicon-list"></span>用户列表</a>
+            {% url "addxlsuserurl" as theaddxlsuserurl %}
+            <a class="btn btn-default {%if request.path = theaddxlsuserurl%} active {%endif%}" href={{ theaddxlsuserurl }}><span class="glyphicon glyphicon-list"></span>批量导入</a>
+            {% url "removegroupsurl" as theremovegroupsurl %}
+            <a class="btn btn-default {%if request.path = theremovegroupsurl%} active {%endif%}" href={{ theremovegroupsurl }}><span class="glyphicon glyphicon-list"></span>批量删除</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <form class="form-horizontal" role="form" action={% url "removegroupsurl" %} method="POST" enctype="multipart/form-data">
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-1">{{item.label}}</label>
+                <div class="col-md-11">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-1 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="form-group">
+            <div class="col-md-offset-1 col-md-10">
+                <button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('确认批量删除吗?')">批量删除</button>
+            <div>
+        </div>
+
+    </form>
+    
+    <script>
+        var demo1 = $('select[name="classid"]').bootstrapDualListbox({
+              nonSelectedListLabel: '可选择分组',
+              selectedListLabel: '已选择分组',
+              preserveSelectionOnMove: 'moved',
+              moveOnSelect: false,
+        });
+    </script>
+{% endblock %}

+ 86 - 0
templates/UserManage/login.html

@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+  <head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="renderer" content="webkit">
+
+    <title>登陆</title>
+
+        <!-- Bootstrap -->
+        <link href="/static/css/bootstrap.css" rel="stylesheet">
+        <link rel="stylesheet" type="text/css" href="/static/css/footer.css">
+    	<link href="/static/css/signin.css" rel="stylesheet">
+
+  </head>
+
+  <body>
+<div>
+        {% for item in form %}
+		{%if item.errors%}  
+                <div class="alert alert-danger" role="alert">
+                    {{item.errors}} {{error_msg}}
+                </div>
+        {%endif%}
+
+        {% endfor %}
+</div>
+<table width="100%" height="100%"><tr><td valign="middle">
+<table id="table00" width="1350" height="629" border="0" align="center"  valign="middle" cellpadding="0" cellspacing="0" background="/static/img/login.jpg" >
+  <tr>
+    <td><br />
+      <br />
+        <br />
+        <table width="450" height="278" border="0" align="center" cellpadding="0" cellspacing="0" background="/static/img/bj_01.png">
+          <tr>
+            <td height="38">&nbsp;   
+             
+     				
+     		 </td>
+          </tr>
+          <tr>
+            <td>
+    <form class="form-signin" role="form" action={% url "loginurl" %} method="POST" >
+    {% csrf_token %}
+
+        {% for item in form %}
+        <label  class="sr-only">{{item.label}}</label>
+        {{item}}
+        {% endfor %}
+
+        <div class="form-group">
+            <div class="col-md-offset-1 col-md-10">
+                <input type="hidden" name="next" value="{{ next }}" />
+            </div>
+        </div>
+        <div class="col-md-offset-2 col-md-10">
+          <button class="btn btn-lg btn-primary " type="submit">登 录</button>
+          <a class="btn btn-lg btn-warning" href={% url "signupurl" %} >注 册</a>
+        </div>
+
+
+    </form>
+            </td>
+          </tr>
+          <tr>
+            <td height="38">&nbsp;</td>
+          </tr>
+      </table></td>
+  </tr>
+</table></td></tr></table>
+
+
+<script src="/static/js/jquery.min.js"></script> 
+<script src="/static/js/bootstrap.min.js"></script> 
+<script src="/static/js/bootstrap-datetimepicker.min.js"></script> 
+<script src="/static/js/bootstrap-datetimepicker.zh-CN.js"></script> 
+  </body>
+</html>
+
+
+
+
+
+
+

+ 45 - 0
templates/UserManage/password.change.html

@@ -0,0 +1,45 @@
+{% extends "layout.html" %}
+
+{% block title %}
+    修改密码
+{% endblock %}
+
+{% block content %}
+<div class="section section-breadcrumbs">
+	<div class="container">
+		<div class="row">
+			<div class="col-md-12">
+				<h1>修改密码</h1>
+			</div>
+		</div>
+	</div>
+</div>
+<!-- 内容 -->
+<div class="container theme-showcase" role="main">
+	<center>
+    <form class="form-signin col-md-4 col-md-offset-3" role="form" action={% url "changepasswordurl" %} method="POST" >
+    {% csrf_token %}
+<div>
+        {% for item in form %}
+		{%if item.errors%}  
+                <div class="alert alert-danger" role="alert">
+                    {{item.errors}} {{error_msg}}
+                </div>
+        {%endif%}
+        {% endfor %}
+        
+        {% for item in form %}
+        <div class="input-group">
+        <span class="input-group-addon" id="basic-addon1">{{item.label}}</span>
+        {{item}}
+        </div>
+        <br>
+        {% endfor %}
+</div>
+<br>
+        <button class="btn btn-lg btn-primary btn-block" type="submit">修 改</button>
+    </form>
+  </center>
+</div>
+{% endblock %}
+

+ 28 - 0
templates/UserManage/password.reset.html

@@ -0,0 +1,28 @@
+{% 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>
+<br /><br /><br />
+<div class="alert alert-success" role="alert">
+	<center>
+		<h3>
+			操作成功!用户
+			<span style="font-size:20px;color: blue;font-weight: bold;">{{ object.username }}</span>
+			的密码已重置为
+			<span style="font-size:20px;color: blue;font-weight: bold;">{{ newpassword }}</span>
+		</h3>
+	</center>
+</div>
+{% endblock %}

+ 51 - 0
templates/UserManage/permission.add.html

@@ -0,0 +1,51 @@
+{% 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>
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "addpermissionurl" as theaddpermissionurl %}
+            <a class="btn btn-default {%if request.path = theaddpermissionurl%} active {%endif%}" href={{ theaddpermissionurl }}><span class="glyphicon glyphicon-edit"></span>新建权限</a>
+            {% url "listpermissionurl" as thelistpermissionurl %}
+            <a class="btn btn-default {%if request.path = thelistpermissionurl%} active {%endif%}" href={{ thelistpermissionurl }}><span class="glyphicon glyphicon-list"></span>权限列表</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <form class="form-horizontal" role="form" action={% url "addpermissionurl" %} method="POST" >
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-1">{{item.label}}</label>
+                <div class="col-md-2">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-1 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="form-group">
+            <div class="col-md-offset-1 col-md-10">
+                <button type="submit" class="btn btn-danger btn-sm">新 增</button>
+            </div>
+        </div>
+
+    </form>
+
+{% endblock %}

+ 51 - 0
templates/UserManage/permission.edit.html

@@ -0,0 +1,51 @@
+{% 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>
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "addpermissionurl" as theaddpermissionurl %}
+            <a class="btn btn-default {%if request.path = theaddpermissionurl%} active {%endif%}" href={{ theaddpermissionurl }}><span class="glyphicon glyphicon-edit"></span>新建权限</a>
+            {% url "listpermissionurl" as thelistpermissionurl %}
+            <a class="btn btn-default {%if request.path = thelistpermissionurl%} active {%endif%}" href={{ thelistpermissionurl }}><span class="glyphicon glyphicon-list"></span>权限列表</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <form class="form-horizontal" role="form" action={% url "editpermissionurl" ID %} method="POST" >
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-1">{{item.label}}</label>
+                <div class="col-md-2">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-1 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="form-group">
+            <div class="col-md-offset-1 col-md-10">
+                <button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('确认更新吗?')">更 新</button>
+            </div>
+        </div>
+
+    </form>
+
+{% endblock %}

+ 50 - 0
templates/UserManage/permission.list.html

@@ -0,0 +1,50 @@
+{% 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>
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "addpermissionurl" as theaddpermissionurl %}
+            <a class="btn btn-default {%if request.path = theaddpermissionurl%} active {%endif%}" href={{ theaddpermissionurl }}><span class="glyphicon glyphicon-edit"></span>新建权限</a>
+            {% url "listpermissionurl" as thelistpermissionurl %}
+            <a class="btn btn-default {%if request.path = thelistpermissionurl%} active {%endif%}" href={{ thelistpermissionurl }}><span class="glyphicon glyphicon-list"></span>权限列表</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <table class="table table-hover table-striped  table-bordered table-condensed">
+        <tr>
+            <th>权限名称</th>
+            <th>URL</th>
+            <th>操作</th>
+        </tr>
+
+        {% for i in lPage %}
+            <tr style="font-size: 13px;">
+                <td>{{ i.name }}</td>
+                <td>{{ i.url }}</td>
+
+                <td>
+                    <a href={% url "editpermissionurl" i.id %} onclick="return confirm('确认编辑权限吗??')"><span class="glyphicon glyphicon-edit btn-xs"></span></a>
+                    <a href={% url "deletepermissionurl" i.id %} onclick="return confirm('确认删除权限吗??')"><span class="glyphicon glyphicon-trash btn-xs"></span></a>
+                </td>
+            </tr>
+        {% endfor %}
+
+    </table>
+
+    {% include "common/paginator.html" %}
+{% endblock %}

+ 17 - 0
templates/UserManage/permission.no.html

@@ -0,0 +1,17 @@
+{% extends "layout.html" %}
+
+{% block title %}
+    抱歉
+{% endblock %}
+
+{% block content %}
+<br /><br /><br /><br /><br /><br /><br />
+<div class="alert alert-danger" role="alert">
+	<center>
+		<h1>
+		抱歉,您没有权限访问本页面!
+		</h1>
+		<h3><a href="javascript:history.back();">返回之前的页面&raquo;</a></h3>
+	</center>
+</div>
+{% endblock %}

+ 65 - 0
templates/UserManage/role.add.html

@@ -0,0 +1,65 @@
+{% extends "base.html" %}
+
+{% block title %}
+    新建角色
+{% endblock %}
+
+{% block head %}
+    <script src="/static/js/jquery.bootstrap-duallistbox.js"></script>
+    <link rel="stylesheet" type="text/css" href="/static/css/bootstrap-duallistbox.css">
+{% 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>
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "addroleurl" as theaddroleurl %}
+            <a class="btn btn-default {%if request.path = theaddroleurl%} active {%endif%}" href={{ theaddroleurl }}><span class="glyphicon glyphicon-edit"></span>新建角色</a>
+            {% url "listroleurl" as thelistroleurl %}
+            <a class="btn btn-default {%if request.path = thelistroleurl%} active {%endif%}" href={{ thelistroleurl }}><span class="glyphicon glyphicon-list"></span>角色列表</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <form class="form-horizontal" role="form" action={% url "addroleurl" %} method="POST" >
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-1">{{item.label}}</label>
+                <div class="col-md-11">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-1 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="form-group">
+            <div class="col-md-offset-1 col-md-10">
+                <button type="submit" class="btn btn-danger btn-sm">新 增</button>
+            </div>
+        </div>
+
+    </form>
+
+    <script>
+        var demo1 = $('select[name="permission"]').bootstrapDualListbox({
+              nonSelectedListLabel: '可选择权限',
+              selectedListLabel: '已选择权限',
+              preserveSelectionOnMove: 'moved',
+              moveOnSelect: false,
+        });
+    </script>
+
+{% endblock %}

+ 65 - 0
templates/UserManage/role.edit.html

@@ -0,0 +1,65 @@
+{% extends "base.html" %}
+
+{% block title %}
+    编辑角色
+{% endblock %}
+
+{% block head %}
+    <script src="/static/js/jquery.bootstrap-duallistbox.js"></script>
+    <link rel="stylesheet" type="text/css" href="/static/css/bootstrap-duallistbox.css">
+{% 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>
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "addroleurl" as theaddroleurl %}
+            <a class="btn btn-default {%if request.path = theaddroleurl%} active {%endif%}" href={{ theaddroleurl }}><span class="glyphicon glyphicon-edit"></span>新建角色</a>
+            {% url "listroleurl" as thelistroleurl %}
+            <a class="btn btn-default {%if request.path = thelistroleurl%} active {%endif%}" href={{ thelistroleurl }}><span class="glyphicon glyphicon-list"></span>角色列表</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <form class="form-horizontal" role="form" action={% url "editroleurl" ID %} method="POST" >
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-1">{{item.label}}</label>
+                <div class="col-md-11">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-1 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="form-group">
+            <div class="col-md-offset-1 col-md-10">
+                <button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('确认更新吗?')">更 新</button>
+            </div>
+        </div>
+
+    </form>
+
+    <script>
+        var demo1 = $('select[name="permission"]').bootstrapDualListbox({
+              nonSelectedListLabel: '可选择权限',
+              selectedListLabel: '已选择权限',
+              preserveSelectionOnMove: 'moved',
+              moveOnSelect: false,
+        });
+    </script>
+
+{% endblock %}

+ 48 - 0
templates/UserManage/role.list.html

@@ -0,0 +1,48 @@
+{% 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>
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "addroleurl" as theaddroleurl %}
+            <a class="btn btn-default {%if request.path = theaddroleurl%} active {%endif%}" href={{ theaddroleurl }}><span class="glyphicon glyphicon-edit"></span>新建角色</a>
+            {% url "listroleurl" as thelistroleurl %}
+            <a class="btn btn-default {%if request.path = thelistroleurl%} active {%endif%}" href={{ thelistroleurl }}><span class="glyphicon glyphicon-list"></span>角色列表</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <table class="table table-hover table-striped  table-bordered table-condensed">
+        <tr>
+            <th>角色名称</th>
+            <th>操作</th>
+        </tr>
+
+        {% for i in lPage %}
+            <tr style="font-size: 13px;">
+                <td>{{ i.name }} </td>
+
+                <td>
+                    <a href={% url "editroleurl" i.id %} onclick="return confirm('确认编辑角色吗??')"><span class="glyphicon glyphicon-edit btn-xs"></span></a>
+                    <a href={% url "deleteroleurl" i.id %} onclick="return confirm('确认删除角色吗??')"><span class="glyphicon glyphicon-trash btn-xs"></span></a>
+                </td>
+            </tr>
+        {% endfor %}
+
+    </table>
+
+    {% include "common/paginator.html" %}
+{% endblock %}

+ 46 - 0
templates/UserManage/role.plist.html

@@ -0,0 +1,46 @@
+{% 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>
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "listrolepermission" as theaddroleurl %}
+            <a class="btn btn-default {%if request.path = theaddroleurl%} active {%endif%}" href={{ theaddroleurl }}><span class="glyphicon glyphicon-edit"></span>角色权限设置</a>
+            {% url "listpermissionurl" as thelistroleurl %}
+            <a class="btn btn-default {%if request.path = thelistroleurl%} active {%endif%}" href={{ thelistroleurl }}><span class="glyphicon glyphicon-list"></span>自定义权限</a>
+        </div>
+    </div>
+    <hr/>
+
+    <table class="table table-hover table-striped  table-bordered table-condensed">
+        <tr>
+            <th>角色名称</th>
+            <th>操作</th>
+        </tr>
+
+        {% for i in lPage %}
+            <tr style="font-size: 13px;">
+                <td>{{ i.name }} </td>
+
+                <td>
+                    <a href={% url "editroleurl" i.id %}><span class="glyphicon glyphicon-edit btn-xs"></span>修改权限</a>
+                </td>
+            </tr>
+        {% endfor %}
+
+    </table>
+
+    {% include "common/paginator.html" %}
+{% endblock %}

+ 41 - 0
templates/UserManage/user.add.html

@@ -0,0 +1,41 @@
+{% 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/>
+
+    <form class="form-horizontal" role="form" action={% url "adduserurl" %} method="POST" >
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-1">{{item.label}}</label>
+                <div class="col-md-2">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-1 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="form-group">
+            <div class="col-md-offset-1 col-md-10">
+                <button type="submit" class="btn btn-danger btn-sm">新 增</button>
+            </div>
+        </div>
+    </form>
+{% endblock %}

+ 42 - 0
templates/UserManage/user.add.html.bak

@@ -0,0 +1,42 @@
+{% extends "base.html" %}
+
+{% block title %}
+    Add User
+{% endblock %}
+
+{% block content %}
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "adduserurl" as theadduserurl %}
+            <a class="btn btn-default {%if request.path = theadduserurl%} active {%endif%}" href={{ theadduserurl }}><span class="glyphicon glyphicon-edit"></span>新建用户</a>
+            {% url "listuserurl" as thelistuserurl %}
+            <a class="btn btn-default {%if request.path = thelistuserurl%} active {%endif%}" href={{ thelistuserurl }}><span class="glyphicon glyphicon-list"></span>用户列表</a>
+            {% url "addxlsuserurl" as theaddxlsuserurl %}
+            <a class="btn btn-default {%if request.path = theaddxlsuserurl%} active {%endif%}" href={{ addxlsuserurl }}><span class="glyphicon glyphicon-list"></span>批量导入</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <form class="form-horizontal" role="form" action={% url "adduserurl" %} method="POST" >
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-1">{{item.label}}</label>
+                <div class="col-md-2">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-1 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="form-group">
+            <div class="col-md-offset-1 col-md-10">
+                <button type="submit" class="btn btn-danger btn-sm">新 增</button>
+            <div>
+        </div>
+    </form>
+{% endblock %}

+ 41 - 0
templates/UserManage/user.addadmin.html

@@ -0,0 +1,41 @@
+{% 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>
+<div>
+    <form class="form-horizontal" role="form" action={% url "addadminurl" %} method="POST" >
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-1">{{item.label}}</label>
+                <div class="col-md-2">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-1 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="form-group">
+            <div class="col-md-offset-1 col-md-10">
+                <button type="submit" class="btn btn-danger btn-sm">新增管理员</button>
+            <div>
+        </div>
+    </form>
+</div></div></div>
+{% endblock %}

+ 33 - 0
templates/UserManage/user.addxls.error.html

@@ -0,0 +1,33 @@
+{% 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-danger" role="alert">
+        <strong>错误信息: </strong>{{xerror}}
+      </div>
+	</center> 
+	</div>
+
+{% endblock %}
+
+
+

+ 45 - 0
templates/UserManage/user.addxls.html

@@ -0,0 +1,45 @@
+{% 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">请导入符合格式的XLS文件</h4>
+	<h4 class="col-md-offset-1">批量导入用户仅限于普通用户,不能批量导入管理员账户</h4>
+	<h4 class="col-md-offset-1">XLS格式模板<a href='/static/user.xls'>下载</a></h4>
+	<hr/>
+    <form class="form-horizontal" role="form" action={% url "addxlsuserurl" %} method="POST" enctype="multipart/form-data">
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-2">{{item.label}}</label>
+                <div class="col-md-2">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-2 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="col-md-offset-2">
+                <button type="submit" class="btn btn-danger btn-sm">导 入</button>
+        </div>
+    </form>
+{% endblock %}

+ 42 - 0
templates/UserManage/user.addxls.html.bak

@@ -0,0 +1,42 @@
+{% extends "base.html" %}
+
+{% block title %}
+    Add User
+{% endblock %}
+
+{% block content %}
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "adduserurl" as theadduserurl %}
+            <a class="btn btn-default {%if request.path = theadduserurl%} active {%endif%}" href={{ theadduserurl }}><span class="glyphicon glyphicon-edit"></span>新建用户</a>
+            {% url "listuserurl" as thelistuserurl %}
+            <a class="btn btn-default {%if request.path = thelistuserurl%} active {%endif%}" href={{ thelistuserurl }}><span class="glyphicon glyphicon-list"></span>用户列表</a>
+            {% url "addxlsuserurl" as theaddxlsuserurl %}
+            <a class="btn btn-default {%if request.path = theaddxlsuserurl%} active {%endif%}" href={{ theaddxlsuserurl }}><span class="glyphicon glyphicon-list"></span>批量导入</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <form class="form-horizontal" role="form" action={% url "addxlsuserurl" %} method="POST" enctype="multipart/form-data">
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-1">{{item.label}}</label>
+                <div class="col-md-2">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-1 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="form-group">
+            <div class="col-md-offset-1 col-md-10">
+                <button type="submit" class="btn btn-danger btn-sm">新 增</button>
+            <div>
+        </div>
+    </form>
+{% endblock %}

+ 39 - 0
templates/UserManage/user.change.html

@@ -0,0 +1,39 @@
+{% extends "layout.html" %}
+
+{% block title %}
+    修改个人资料
+{% endblock %}
+
+{% block content %}
+<div class="section section-breadcrumbs">
+    <div class="container">
+        <div class="row">
+            <div class="col-md-12">
+                <h1>修改个人资料</h1>
+            </div>
+        </div>
+    </div>
+</div>
+
+<form class="form-horizontal" role="form" action={% url "changeuserurl" %} method="POST" >
+    {% csrf_token %}
+    {% for item in form %}
+        <div class="form-group">
+            <label class="control-label col-md-1">{{item.label}}</label>
+            <div class="col-md-2">
+                {{item}}
+            </div>
+            <div class="col-md-offset-1 col-md-10">
+                {{item.errors}}
+            </div>
+        </div>
+    {% endfor %}
+
+    <div class="form-group">
+        <div class="col-md-offset-1 col-md-10">
+            <button type="submit" class="btn btn-danger" onclick="return confirm('确认更新吗?')">更 新</button>
+        </div>
+    </div>
+</form>
+
+{% endblock %}

+ 50 - 0
templates/UserManage/user.edit.html

@@ -0,0 +1,50 @@
+{% 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>
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "listuserurl" as thelistuserurl %}
+            <a class="btn btn-default {%if request.path = thelistuserurl%} active {%endif%}" href={{ thelistuserurl }}><span class="glyphicon glyphicon-list"></span>用户列表</a>
+            {% url "removesusersurl" as theremovesusersurl %}
+            <a class="btn btn-default {%if request.path = theremovesusersurl%} active {%endif%}" href={{ theremovesusersurl }}><span class="glyphicon glyphicon-list"></span>批量删除</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <form class="form-horizontal" role="form" action={% url "edituserurl" ID %} method="POST" >
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-1">{{item.label}}</label>
+                <div class="col-md-2">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-1 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="form-group">
+            <div class="col-md-offset-1 col-md-10">
+                <button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('确认更新吗?')">更 新</button>
+                <a class="btn btn-danger btn-sm" href={% url "resetpasswordurl" ID %} onclick="return confirm('确认重置密码吗??')">重置密码</a>
+            </div>
+        </div>
+    </form>
+{% endblock %}

+ 43 - 0
templates/UserManage/user.edit.html.bak

@@ -0,0 +1,43 @@
+{% extends "base.html" %}
+
+{% block title %}
+    Edit User
+{% endblock %}
+
+{% block content %}
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "adduserurl" as theadduserurl %}
+            <a class="btn btn-default {%if request.path = theadduserurl%} active {%endif%}" href={{ theadduserurl }}><span class="glyphicon glyphicon-edit"></span>新建用户</a>
+            {% url "listuserurl" as thelistuserurl %}
+            <a class="btn btn-default {%if request.path = thelistuserurl%} active {%endif%}" href={{ thelistuserurl }}><span class="glyphicon glyphicon-list"></span>用户列表</a>
+            {% url "addxlsuserurl" as theaddxlsuserurl %}
+            <a class="btn btn-default {%if request.path = theaddxlsuserurl%} active {%endif%}" href={{ addxlsuserurl }}><span class="glyphicon glyphicon-list"></span>批量导入</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <form class="form-horizontal" role="form" action={% url "edituserurl" ID %} method="POST" >
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-1">{{item.label}}</label>
+                <div class="col-md-2">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-1 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="form-group">
+            <div class="col-md-offset-1 col-md-10">
+                <button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('确认更新吗?')">更 新</button>
+                <a class="btn btn-danger btn-sm" href={% url "resetpasswordurl" ID %} onclick="return confirm('确认重置密码吗??')">重置密码</a>
+            <div>
+        </div>
+    </form>
+{% endblock %}

+ 69 - 0
templates/UserManage/user.list.html

@@ -0,0 +1,69 @@
+{% 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>
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "listuserurl" as thelistuserurl %}
+            <a class="btn btn-default {%if request.path = thelistuserurl%} active {%endif%}" href={{ thelistuserurl }}><span class="glyphicon glyphicon-list"></span>用户列表</a>
+            {% url "removesusersurl" as theremovesusersurl %}
+            <a class="btn btn-default {%if request.path = theremovesusersurl%} active {%endif%}" href={{ theremovesusersurl }}><span class="glyphicon glyphicon-list"></span>批量删除</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    {{FilterHTML|safe}}
+
+    <table class="table table-hover table-striped  table-bordered table-condensed">
+        <tr>
+            <th>账号</th>
+            <th>姓名</th>
+            <th>性别</th>
+            <th>学号</th>
+            <th>分组</th>
+            <th>状态</th>
+            <th>角色</th>
+            <th>最后登录时间</th>
+            <th>操作</th>
+        </tr>
+
+            {% for i in lPage %}
+                <tr style="font-size: 13px;">
+                    <td>{{ i.username }}</td>
+                    <td>{{ i.nickname|default:"----" }}</td>
+                    <td>{{ i.sex|default:"----" }}</td>
+                    <td>{{ i.sid }}</td>
+                    <td>{{ i.classid }}</td>
+                    <td>
+                        {% if i.is_active %}
+                            <span class="label label-success">启用</span>
+                        {% else %}
+                            <span class="label label-default">禁用</span>
+                        {% endif %}
+                    </td>
+                    <td>{{ i.role|default:"----" }}</td>
+                    <td>{{ i.last_login|date:"Y-m-d H:i:s" }}</td>
+                    <td class="host_buttom">
+                        <a class="btn btn-warning btn-xs"  href={% url "edituserurl" i.id %} onclick="return confirm('是否确认编辑?')">编辑</a>
+                        <a class="btn btn-danger btn-xs" href={% url "deleteuserurl" i.id %} onclick="return confirm('是否确认删除?')">删除</a>
+                    </td>
+                </tr>
+            {% endfor %}
+
+        </table>
+
+    {% include "common/paginator.html" %}
+{% endblock %}

+ 60 - 0
templates/UserManage/user.list.html.bak

@@ -0,0 +1,60 @@
+{% extends "base.html" %}
+
+{% block title %}
+    List User
+{% endblock %}
+
+{% block content %}
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "adduserurl" as theadduserurl %}
+            <a class="btn btn-default {%if request.path = theadduserurl%} active {%endif%}" href={{ theadduserurl }}><span class="glyphicon glyphicon-edit"></span>新建用户</a>
+            {% url "listuserurl" as thelistuserurl %}
+            <a class="btn btn-default {%if request.path = thelistuserurl%} active {%endif%}" href={{ thelistuserurl }}><span class="glyphicon glyphicon-list"></span>用户列表</a>
+            {% url "addxlsuserurl" as theaddxlsuserurl %}
+            <a class="btn btn-default {%if request.path = theaddxlsuserurl%} active {%endif%}" href={{ addxlsuserurl }}><span class="glyphicon glyphicon-list"></span>批量导入</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <table class="table table-hover table-striped  table-bordered table-condensed">
+        <tr>
+            <th>账号</th>
+            <th>姓名</th>
+            <th>性别</th>
+            <th>学号</th>
+            <th>分组</th>
+            <th>状态</th>
+            <th>角色</th>
+            <th>最后登录时间</th>
+            <th>操作</th>
+        </tr>
+
+            {% for i in lPage %}
+                <tr style="font-size: 13px;">
+                    <td>{{ i.username }}</td>
+                    <td>{{ i.nickname|default:"----" }}</td>
+                    <td>{{ i.sex|default:"----" }}</td>
+                    <td>{{ i.sid }}</td>
+                    <td>{{ i.classid }}</td>
+                    <td>
+                        {% if i.is_active %}
+                            <span class="label label-success">启用</span>
+                        {% else %}
+                            <span class="label label-default">禁用</span>
+                        {% endif %}
+                    </td>
+                    <td>{{ i.role|default:"----" }}</td>
+                    <td>{{ i.last_login|date:"Y-m-d H:i:s" }}</td>
+                    <td class="host_buttom">
+                        <a class="btn btn-warning btn-xs"  href={% url "edituserurl" i.id %} onclick="return confirm('是否确认编辑?')">编辑</a>
+                        <a class="btn btn-danger btn-xs" href={% url "deleteuserurl" i.id %} onclick="return confirm('是否确认删除?')">删除</a>
+                    </td>
+                </tr>
+            {% endfor %}
+
+        </table>
+
+    {% include "common/paginator.html" %}
+{% endblock %}

+ 59 - 0
templates/UserManage/user.listnew.html

@@ -0,0 +1,59 @@
+{% 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>
+
+
+    {{FilterHTML|safe}}
+
+    <table class="table table-hover table-striped  table-bordered table-condensed">
+        <tr>
+            <th>账号</th>
+            <th>姓名</th>
+            <th>性别</th>
+            <th>学号</th>
+            <th>分组</th>
+            <th>状态</th>
+            <th>角色</th>
+            <th>操作</th>
+        </tr>
+
+            {% for i in lPage %}
+                <tr style="font-size: 13px;">
+                    <td>{{ i.username }}</td>
+                    <td>{{ i.nickname|default:"----" }}</td>
+                    <td>{{ i.sex|default:"----" }}</td>
+                    <td>{{ i.sid }}</td>
+                    <td>{{ i.classid }}</td>
+                    <td>
+                        {% if i.is_active %}
+                            <span class="label label-success">启用</span>
+                        {% else %}
+                            <span class="label label-default">禁用</span>
+                        {% endif %}
+                    </td>
+                    <td>{{ i.role|default:"----" }}</td>
+                    <td class="host_buttom">
+                        <a class="btn btn-warning btn-xs"  href={% url "edituserurl" i.id %} >审核</a>
+                        <a class="btn btn-danger btn-xs" href={% url "deleteuserurl" i.id %} onclick="return confirm('是否确认删除?')">删除</a>
+                    </td>
+                </tr>
+            {% endfor %}
+
+        </table>
+
+    {% include "common/paginator.html" %}
+{% endblock %}

+ 41 - 0
templates/UserManage/user.remove.error.html

@@ -0,0 +1,41 @@
+{% 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>
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "listuserurl" as thelistuserurl %}
+            <a class="btn btn-default {%if request.path = thelistuserurl%} active {%endif%}" href={{ thelistuserurl }}><span class="glyphicon glyphicon-list"></span>用户列表</a>
+            {% url "removesusersurl" as theremovesusersurl %}
+            <a class="btn btn-default {%if request.path = theremovesusersurl%} active {%endif%}" href={{ theremovesusersurl }}><span class="glyphicon glyphicon-list"></span>批量删除</a>
+        </div>
+    </div>
+
+    <hr/>
+
+
+	<div class="container theme-showcase" role="main">
+	<center>
+	<h3>批量删除用户错误!</h3>
+      <div class="alert alert-danger" role="alert">
+        <strong>错误信息: </strong>{{xerror}}
+      </div>
+	</center> 
+	</div>
+
+{% endblock %}
+
+
+

+ 64 - 0
templates/UserManage/user.removeusers.html

@@ -0,0 +1,64 @@
+{% extends "base.html" %}
+
+{% block title %}
+    批量删除
+{% endblock %}
+
+{% block head %}
+    <script src="/static/js/jquery.bootstrap-duallistbox.js"></script>
+    <link rel="stylesheet" type="text/css" href="/static/css/bootstrap-duallistbox.css">
+{% 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>
+    <div class="btn-toolbar">
+        <div class="btn-group">
+            {% url "listuserurl" as thelistuserurl %}
+            <a class="btn btn-default {%if request.path = thelistuserurl%} active {%endif%}" href={{ thelistuserurl }}><span class="glyphicon glyphicon-list"></span>用户列表</a>
+            {% url "removesusersurl" as theremovesusersurl %}
+            <a class="btn btn-default {%if request.path = theremovesusersurl%} active {%endif%}" href={{ theremovesusersurl }}><span class="glyphicon glyphicon-list"></span>批量删除</a>
+        </div>
+    </div>
+
+    <hr/>
+
+    <form class="form-horizontal" role="form" action={% url "removesusersurl" %} method="POST" enctype="multipart/form-data">
+    {% csrf_token %}
+
+        {% for item in form %}
+            <div class="form-group">
+                <label class="control-label col-md-1">{{item.label}}</label>
+                <div class="col-md-11">
+                    {{item}}
+                </div>
+                <div class="col-md-offset-1 col-md-10">
+                    {{item.errors}}
+                </div>
+            </div>
+        {% endfor %}
+
+        <div class="form-group">
+            <div class="col-md-offset-1 col-md-10">
+                <button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('确认批量删除吗?')">批量删除</button>
+            </div>
+        </div>
+
+    </form>
+    
+    <script>
+        var demo1 = $('select[name="classid"]').bootstrapDualListbox({
+              nonSelectedListLabel: '可选择分组',
+              selectedListLabel: '已选择分组',
+              preserveSelectionOnMove: 'moved',
+              moveOnSelect: false,
+        });
+    </script>
+{% endblock %}

+ 154 - 0
templates/UserManage/user.signup.html

@@ -0,0 +1,154 @@
+<!DOCTYPE html>
+<!--[if lt IE 7]>
+<html class="no-js lt-ie9 lt-ie8 lt-ie7">
+    <![endif]-->
+    <!--[if IE 7]>
+    <html class="no-js lt-ie9 lt-ie8">
+        <![endif]-->
+        <!--[if IE 8]>
+        <html class="no-js lt-ie9">
+            <![endif]-->
+            <!--[if gt IE 8]>
+            <!-->
+            <html class="no-js">
+                <!--<![endif]-->
+<head>
+                <meta http-equiv="content-type" content="text/html; charset=utf-8">
+                <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+                <meta name="viewport" content="width=device-width, initial-scale=1">
+                <meta name="renderer" content="webkit">
+
+                <title>注册</title>
+
+                <!-- Bootstrap -->
+                <link href="/static/css/bootstrap.css" rel="stylesheet">
+                <link href="/static/css/common.css" rel="stylesheet">
+                <link rel="stylesheet" type="text/css" href="/static/css/footer.css">
+                <script src="/static/js/jquery.min.js"></script>
+                <script src="/static/js/jquery.myext.js"></script>
+                <script src="/static/js/bootstrap.min.js"></script>
+                <script src="/static/js/bootstrap-datetimepicker.min.js"></script>
+                <script src="/static/js/bootstrap-datetimepicker.zh-CN.js"></script>
+                <link rel="stylesheet" href="/static/css/icomoon-social.css">
+
+                <link rel="stylesheet" href="/static/css/leaflet.css" />
+                <!--[if lte IE 8]>
+                <link rel="stylesheet" href="/static/css/leaflet.ie.css" />
+                <![endif]-->
+                <link rel="stylesheet" href="/static/css/main.css">
+
+                <script src="/static/js/modernizr-2.6.2-respond-1.1.0.min.js"></script>
+                {% block head %}{% endblock %}
+</head>
+
+<body>
+                <!-- 导航栏 -->
+                <div class="mainmenu-wrapper">
+                    <div class="container">
+                        <div class="menuextras">
+
+                            <div class="extras">
+                                <ul>
+                                    <li {% if 'login' in request.path %} class="active" {% endif %}>
+                                        <span class="glyphicon glyphicon-circle-arrow-right"></span>
+                                        <a href="{% url 'loginurl' %}"> <b>登陆</b>
+                                        </a>
+                                    </li>
+                                </ul>
+                            </div>
+                        </div>
+                        <nav id="mainmenu" class="mainmenu">
+                            {% if user.is_authenticated %}
+                            <ul>
+                                <li class="logo-wrapper">
+                                    <a href="/">
+                                        <img src="/static/img/logo.png"></a>
+                                </li>
+                                <li {% if request.path = '/' %} class="active" {% endif %}>
+                                    <a href="/">主页</a>
+                                </li>
+                                <li {% if 'about' in request.path %} class="active" {% endif %}>
+                                    <a href="/about">关于</a>
+                                </li>
+                            </ul>
+                            {% else %}
+                            <ul>
+                                <li class="logo-wrapper">
+                                    <a href="/">
+                                        <img src="/static/img/logo.png"></a>
+                                </li>
+                                <li {% if request.path = '/' %} class="active" {% endif %}>
+                                    <a href="/">主页</a>
+                                </li>
+                                <li {% if 'about' in request.path %} class="active" {% endif %}>
+                                    <a href="/about">关于</a>
+                                </li>
+                            </ul>
+                            {% endif %}
+                        </nav>
+                        <!--/.nav-collapse --> </div>
+                </div>
+
+                <!-- 内容区域 -->
+                <div class="container" style="width:90%">
+                    <br />
+                    <div class="row">
+                        <div class="col-md-2">
+                            <div class="panel panel-primary">
+                                <div class="panel-heading">
+                                    <h4 class="panel-title">
+                                        <span class="glyphicon glyphicon-user btn-xs"></span>
+                                        个人信息中心
+                                    </h4>
+                                </div>
+                                <table class="table">
+                                    <tbody>
+                                        <tr>
+                                            <td>
+                                                <span class="glyphicon glyphicon-circle-arrow-right"></span>
+                                                <a href="{% url 'loginurl' %}">登陆</a>
+                                            </td>
+                                        </tr>
+                                    </tbody>
+                                </table>
+                            </div>
+                        </div>
+                        <div class="col-md-10">
+                            <div class="section section-breadcrumbs">
+                                <div class="container">
+                                    <div class="row">
+                                        <div class="col-md-12">
+                                            <h1>注册</h1>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                            <hr/>
+                            <form class="form-horizontal" role="form" action={% url "signupurl" %} method="POST" >
+                                {% csrf_token %}
+
+                                {% for item in form %}
+                                <div class="form-group">
+                                    <label class="control-label col-md-1">{{item.label}}</label>
+                                    <div class="col-md-2">{{item}}</div>
+                                    <div class="col-md-offset-1 col-md-10">{{item.errors}}</div>
+                                </div>
+                                {% endfor %}
+                                <div class="form-group">
+                                    <div class="col-md-offset-1 col-md-10">
+                                        <button type="submit" class="btn btn-danger btn-sm">注册</button>
+                                    </div>
+                                </div>
+                            </form>
+                        </div>
+                    </div>
+                </div>
+                {% include "var/footer.html" %}
+                <script src="/static/js/jquery.fitvids.js"></script>
+                <script src="/static/js/jquery.sequence-min.js"></script>
+                <script src="/static/js/jquery.bxslider.js"></script>
+                <script src="/static/js/main-menu.js"></script>
+                <script src="/static/js/template.js"></script>
+                <script src="/static/js/navmsg.js"></script>
+</body>
+            </html>

+ 20 - 0
templates/about.html

@@ -0,0 +1,20 @@
+{% extends "layout.html" %}
+
+{% block title %}
+    关于我们
+{% endblock %}
+
+{% block content %}
+<div class="section section-breadcrumbs">
+	<div class="container">
+		<div class="row">
+			<div class="col-md-12">
+				<h1>关于我们</h1>
+			</div>
+		</div>
+	</div>
+</div>
+
+{% include "var/about.html" %}
+
+{% endblock %}

+ 313 - 0
templates/admin.html

@@ -0,0 +1,313 @@
+{% 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>
+<!-- 
+<div class="alert alert-success" role="alert"><b>友情提示:</b>如果您刚刚建站,请记得在 左侧菜单->站务管理 ->修改网站信息 修改网站的信息。</div>
+-->
+<div class="well well-lg"  style="background:#FFF; color:#000">
+	<h3>您好,{{request.user.nickname}}</h3>
+	<h5>现在是 <span id="labelClock"></span></h5>
+	<h5>您有 <span id="mailalt"></span> 封未读邮件。 <a href="{% url "ms_mailbox" %}">查看站内信箱 &raquo;</a></h5>
+</div>
+
+<div class="row">
+    <div class="col-md-6">
+        <div class="panel panel-default" style="height:500px;">
+            <div class="panel-heading">
+                最近留言&nbsp;&nbsp;&nbsp;&nbsp;
+                <a href="{% url "lmbrurl" %}">查看详情 &raquo;</a>
+            </div>
+            <table class="table">
+                <thead>
+                    <tr>
+                        <th>时间</th>
+                        <th>来源</th>
+                        <th>内容摘要</th>
+                    </tr>
+                </thead>
+                <tbody>
+                    {% for i in lmdata %}
+                    <tr height=40>
+                        <td>{{i.sendtime|date:"Y-m-d H:M:S"}}</td>
+                        <td>
+                            {% if i.fromuser.sid %}
+                            <span id="bm_tonick">{{i.fromuser.nickname}}</span>
+                            <span class="text-success">
+                                &lt;
+                                <span id="bm_toun">{{i.fromuser.username}}</span>
+                                &gt;
+                            </span>
+                            <span class="text-primary">
+                                [
+                                <span id="bm_toid">{{i.fromuser.sid}}</span>
+                                ]
+                            </span>
+                            {% endif %}
+                        </td>
+                        <td>{{i.content|truncatechars:"20"}}</td>
+                    </tr>
+                    {% endfor %}
+                </tbody>
+            </table>
+        </div>
+    </div>
+    <div class="col-md-6">
+        <div class="panel panel-default" style="height:500px;">
+            <div class="panel-heading">
+                未读消息&nbsp;&nbsp;&nbsp;&nbsp;
+                <a href="{% url "lmbrurl" %}">查看详情 &raquo;</a>
+            </div>
+            <table class="table">
+                <thead>
+                    <tr>
+                        <th>时间</th>
+                        <th>来源</th>
+                        <th>内容摘要</th>
+                    </tr>
+                </thead>
+                <tbody>
+                    {% for i in msdata %}
+                    <tr height=40>
+                        <td>{{i.sendtime|date:"Y-m-d H:M:S"}}</td>
+                        <td>
+                            {% if i.fromuser.sid %}
+                            <span id="bm_tonick">{{i.fromuser.nickname}}</span>
+                            <span class="text-success">
+                                &lt;
+                                <span id="bm_toun">{{i.fromuser.username}}</span>
+                                &gt;
+                            </span>
+                            <span class="text-primary">
+                                [
+                                <span id="bm_toid">{{i.fromuser.sid}}</span>
+                                ]
+                            </span>
+                            {% endif %}
+
+                        </td>
+                        <td>{{i.content|truncatechars:"20"}}</td>
+                    </tr>
+                    {% endfor %}
+                </tbody>
+            </table>
+        </div>
+    </div>
+</div>
+<div class="row">
+    <div class="col-md-6">
+        <div class="panel panel-default" style="height:500px;">
+            <div class="panel-heading">
+                待处理咨询&nbsp;&nbsp;&nbsp;&nbsp;
+                <a href="{% url "lmbrurl" %}">查看详情 &raquo;</a>
+            </div>
+            <table class="table">
+                <thead>
+                    <tr>
+                        <th>预约日期</th>
+                        <th>预约时间</th>
+                        <th>咨询师</th>
+                        <th>来源</th>
+                    </tr>
+                </thead>
+                <tbody>
+                    {% for i in csdata %}
+                    <tr height=40>
+                        <td>{{i.date|date:"Y-m-d"}}</td>
+                        <td>{{i.dtime}}</td>
+                        <td>{{i.expert.realname}}</td>
+                        <td>
+                            {% if i.booker.sid %}
+                            <span id="bm_tonick">{{i.realname}}</span>
+                            <span class="text-success">
+                                &lt;
+                                <span id="bm_toun">{{i.booker.username}}</span>
+                                &gt;
+                            </span>
+                            <span class="text-primary">
+                                [
+                                <span id="bm_toid">{{i.booker.sid}}</span>
+                                ]
+                            </span>
+                            {% endif %}
+                        </td>
+                    </tr>
+                    {% endfor %}
+                </tbody>
+            </table>
+        </div>
+    </div>
+    <div class="col-md-6">
+        <div class="panel panel-default" style="height:500px;">
+            <div class="panel-heading">
+                待审核人员&nbsp;&nbsp;&nbsp;&nbsp;
+                <a href="{% url "lmbrurl" %}">查看详情 &raquo;</a>
+            </div>
+            <table class="table">
+                <thead>
+                    <tr>
+                        <th>用户名</th>
+                        <th>学号</th>
+                        <th>昵称</th>
+                    </tr>
+                </thead>
+                <tbody>
+                    {% for i in usdata %}
+                    <tr height=40>
+                        <td>{{i.username}}</td>
+                        <td>{{i.sid}}</td>
+                        <td>{{i.nickname}}</td>
+                    </tr>
+                    {% endfor %}
+                </tbody>
+            </table>
+        </div>
+    </div>
+</div>
+<!-- <div class="well well-lg" >
+
+</div> -->
+
+<!-- <div class="row">
+
+	<div class="col-md-6">
+
+		<div class="panel panel-default" style="height:500px;">
+
+			<div class="panel-heading">
+				留言板(仅显示前十)&nbsp;&nbsp;&nbsp;&nbsp;
+				<a href="{% url "ms_mailbox" %}">查看详情 &raquo;</a>
+			</div>
+			<table class="table">
+				<thead>
+					<tr>
+						<th>时间</th>
+						<th>来源</th>
+						<th>内容摘要</th>
+					</tr>
+				</thead>
+				<tbody>
+					{% for i in mdata %}
+					<tr>
+						<td>{{i.sendtime|date:"Y-m-d H:M:S"}}</td>
+						<td>
+							<span id="bm_tonick">{{i.fromuser.nickname}}</span>
+							<span class="text-success">
+								&lt;
+								<span id="bm_toun">{{i.fromuser.username}}</span>
+								&gt;
+							</span>
+							<span class="text-primary">
+								[
+								<span id="bm_toid">{{i.fromuser.sid}}</span>
+								]
+							</span>
+						</td>
+						<td>{{i.content|truncatechars:"20"}}</td>
+					</tr>
+					{% endfor %}
+				</tbody>
+			</table>
+		</div>
+
+	</div>
+	<div class="col-md-6">
+		<div class="panel panel-default" style="height:500px;">
+			<div class="panel-heading">
+				危险等级分布图表
+			</div>
+			<div class="panel panel-body" id="charts_dom" style="background:#FFF; color:#000;height:90%;"></div>
+		</div>
+	</div>
+
+</div> -->
+
+<script type="text/javascript" src="/static/js/echarts-all.js"></script>
+<script type="text/javascript" src="/static/js/jquery.timer.js"></script>
+<script type="text/javascript" src="/static/js/homepage.js"></script>
+<script type="text/javascript">
+//         // 基于准备好的dom,初始化echarts图表
+//         var myChart1 = echarts.init(document.getElementById('charts_dom')); 
+
+// option = {
+//     title: {
+//         x: 'center',
+//         text: '危险等级分布图表',
+//         subtext: '心理评测档案系统',
+//         link: '{% url 'projdanger' %}'
+//     },
+//     tooltip: {
+//         trigger: 'item'
+//     },
+//     toolbox: {
+//         show: false,
+//         feature: {
+//             dataView: {show: true, readOnly: false},
+//             restore: {show: true},
+//             saveAsImage: {show: true}
+//         }
+//     },
+//     calculable: true,
+//     grid: {
+//         borderWidth: 0,
+//         y: 80,
+//         y2: 60
+//     },
+//     xAxis: [
+//         {
+//             type: 'category',
+//             show: true,
+//             data: ['等级一','等级二','等级三','等级四','等级五',]
+//         }
+//     ],
+//     yAxis: [
+//         {
+//             type: 'value',
+//             show: false
+//         }
+//     ],
+//     series: [
+//         {
+//             name: '档案数',
+//             type: 'bar',
+//             itemStyle: {
+//                 normal: {
+//                     color: function(params) {
+//                         // build a color map as your need.
+//                         var colorList = [
+//                           '#B5C334','#27727B','#FCCE10','#E87C25','#C1232B',
+//                         ];
+//                         return colorList[params.dataIndex]
+//                     },
+//                     label: {
+//                         show: true,
+//                         position: 'top',
+//                         formatter: '{b}\n{c}'
+//                     }
+//                 }
+//             },
+//             data: [{{count1}},
+//             	{{count2}},
+//             	{{count3}},
+//             	{{count4}},
+//             	{{count5}},
+//             ],
+//         }
+//     ]
+// };
+//         myChart1.setOption(option); 
+</script>
+
+{% endblock %}

+ 167 - 0
templates/base.html

@@ -0,0 +1,167 @@
+<!DOCTYPE html>
+<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
+<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
+<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
+    <head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="renderer" content="webkit">
+        
+        <title>{% block title %}{% include "var/sitename.html" %}{% endblock %}</title>
+        
+        <!-- Bootstrap -->
+        <link href="/static/css/bootstrap.css" rel="stylesheet">
+        <link href="/static/css/common.css" rel="stylesheet">
+        <link rel="stylesheet" type="text/css" href="/static/css/footer.css">
+        <script src="/static/js/jquery.min.js"></script>
+        <script src="/static/js/jquery.myext.js"></script> 
+        <script src="/static/js/bootstrap.min.js"></script> 
+        <script src="/static/js/bootstrap-datetimepicker.min.js"></script> 
+        <script src="/static/js/bootstrap-datetimepicker.zh-CN.js"></script> 
+        <link rel="stylesheet" href="/static/css/icomoon-social.css">
+
+        <link rel="stylesheet" href="/static/css/leaflet.css" />
+        <!--[if lte IE 8]>
+            <link rel="stylesheet" href="/static/css/leaflet.ie.css" />
+        <![endif]-->
+        <link rel="stylesheet" href="/static/css/main.css">
+
+        <script src="/static/js/modernizr-2.6.2-respond-1.1.0.min.js"></script>
+        {% block head %}{% endblock %}
+
+        <style type="text/css">
+            body {  margin-bottom: 120px !important;}
+        </style>
+
+    </head>
+    
+    <body>
+ <!-- 导航栏 -->
+{% url "ms_smform" as smurl %}
+{% url "ms_mailbox" as mburl %}
+{% url "cs_uhist" "all" as uhurl %}
+<div class="mainmenu-wrapper">
+  <div class="container">
+           <div class="menuextras">
+
+                    <div class="extras">
+                        <ul>
+                            <li class="envelope-items dropdown"><i class="glyphicon glyphicon-envelope icon-white"></i> <a href="" data-toggle="dropdown"><b>通知</b><b class="caret"></b></a>
+                            <span id="navmsgalt" class="badge"></span>
+                            <ul class="dropdown-menu" role="menu">
+                                <li role="menuitem"><a href="{{mburl}}">进入邮箱</a></li>
+                                <li role="menuitem"><a href="{{smurl}}">撰写邮件</a></li>
+                            </ul>
+                            </li>
+                 {% if user.is_authenticated %}
+
+                        <li class="dropdown">
+                            <a href="" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-user"></span> {{ request.user.username }} <b class="caret"></b></a>
+                            <ul class="dropdown-menu" role="menu">
+                                <li role="menuitem"><a href="{% url 'changeuserurl' %}">    修改个人资料</a></li>
+                                <li role="menuitem"><a href="{% url 'changepasswordurl' %}">    修改密码</a></li>
+                                {% if user.is_superuser %}
+                                <li role="menuitem"><a href='/admin'>    后台管理</a></li>
+                                {% endif %}
+                                {% ifequal user.role.name "心理咨询师" %}
+                                <li role="menuitem"><a href='/Counsel/admin/'>    咨询师后台</a></li>
+                                {% endifequal %}
+                                {% ifnotequal user.role.name "心理咨询师" %}
+                                <li role="menuitem"><a href='{{uhurl}}'>    咨询预约记录</a></li>
+                                {% endifnotequal %}
+                                <li role="menuitem"><a href="{% url 'logouturl' %}">    注销登陆</a></li>
+                            </ul>
+                        </li>
+
+                {% else %}
+                        <li {% if 'login' in request.path %} class="active" {% endif %}><a href="{% url 'loginurl' %}">登陆</a></li>
+                {% endif %}
+                        </ul>
+                    </div>
+            </div>
+            <nav id="mainmenu" class="mainmenu">
+                {% if user.is_authenticated %}
+                    <ul>
+                        <li><a href="javascript:history.back();" style="color:rgb(10, 103, 171);"><span class="glyphicon glyphicon-circle-arrow-left" aria-hidden="true"></span>后退</a></li>
+                        <li class="logo-wrapper"><a href="/"><img src="/static/img/logo.png"></a></li>
+                        <li {% if request.path = "/admin/" %} class="active" {% endif %}><a href="/admin/">后台主页</a></li>
+                        <li {% if request.path = "/" %} class="active" {% endif %}><a href="/">前台主页</a></li>
+                        <li {% if 'about' in request.path %} class="active" {% endif %}><a href="/about">关于</a></li>
+                    </ul>
+
+                {% else %}
+                    <ul>
+                        <li class="logo-wrapper"><a href="/"><img src="/static/img/logo.png"></a></li>
+                        <li {% if request.path = '/' %} class="active" {% endif %}><a href="/">主页</a></li>
+                        <li {% if 'about' in request.path %} class="active" {% endif %}><a href="/about">关于</a></li>
+                    </ul>
+                {% endif %}
+            </nav>
+    <!--/.nav-collapse --> 
+  </div>
+ </div>
+
+
+
+        <!-- 内容区域 -->
+<div class="container" style="width:90%">
+    <br />
+    <div class="row">
+        <div class="col-md-2">
+            {% include "sidebar.html" %}
+        </div>
+        <div class="col-md-10">
+            {% block content %}{% endblock %}
+        </div>
+    </div>
+</div>
+
+
+         {% include "var/footer.html" %}
+         <script src="/static/js/jquery.fitvids.js"></script>
+        <script src="/static/js/jquery.sequence-min.js"></script>
+        <script src="/static/js/jquery.bxslider.js"></script>
+        <script src="/static/js/main-menu.js"></script>
+        <script src="/static/js/template.js"></script>
+    <script src="/static/js/navmsg.js"></script>
+            <script src="/static/js/bootstrap-datetimepicker.min.js"></script> 
+        <script src="/static/js/bootstrap-datetimepicker.zh-CN.js"></script>
+        <script>
+$(function(){
+ //页面初始化
+ window.onload=function(){
+ $("#j-event-list li:first").trigger("click");//触发:用户选择事件
+ $("#go12").trigger("click");//触发:查询
+ };
+
+ $('.form_date').datetimepicker({
+ language: 'zh-CN',
+ weekStart: 1,
+ todayBtn: 1,
+ autoclose: 1,
+ todayHighlight: 1,
+ startView: 2,
+ minView: 2,
+ forceParse: 0,
+ pickerPosition: "bottom-left"
+ });
+
+ $("#j-wds-ctl").bind("click",function(){
+ if($(this).find("i").hasClass("glyphicon-th-list")){
+ $(this).find("i").removeClass("glyphicon-th-list").addClass("glyphicon-fullscreen");
+ $(".G-wrap-fluid").addClass("G-wrap-static");
+ }else{
+ $(this).find("i").removeClass("glyphicon-fullscreen").addClass("glyphicon-th-list");
+ $(".G-wrap-fluid").removeClass("G-wrap-static");
+ };
+ $(window).trigger("resize");
+ $("#j-chart").hide().delay(100).fadeIn();
+ return false;
+ });
+
+ });
+</script>
+    </body>
+</html>

+ 135 - 0
templates/common/Filter/maindiv.html

@@ -0,0 +1,135 @@
+<div class="panel panel-warning">
+	<div class="panel-heading">
+		<h4 class="panel-title">
+			<span class="glyphicon glyphicon-filter btn-xs"></span>
+			查找/筛选/过滤
+			<small>(带*项目可模糊查询)</small>
+		</h4>
+	</div>
+	<div class="panel-body">
+		<form class="form-inline" action="" method="GET" onsubmit="return procFilterData();">
+			{% for i in textitems %}
+				<div class="form-group">
+					<label class="sr-only" for="{{i.ctid}}">{{i.title}}</label>
+					<input type="text" class="form-control" id="{{i.ctid}}" name="{{i.ctname}}" placeholder="{{i.title}}" value="{{i.value}}" />
+				</div>
+			{% endfor %}
+			{% for i in valitems %}
+				<div class="form-group">
+					<label class="sr-only" for="{{i.ctid}}">{{i.title}}</label>
+					<input type="text" class="form-control" id="{{i.ctid}}" name="{{i.ctname}}" placeholder="{{i.title}}" value="{{i.value}}" />
+				</div>
+			{% endfor %}
+			{% for i in dateeqi %}
+				<div class="form-group">
+					<label class="sr-only" for="{{i.ctid}}">{{i.title}}</label>
+					<input type="text" class="form-control" id="{{i.ctid}}" name="{{i.ctname}}" placeholder="{{i.title}}" value="{{i.value}}" />
+				</div>
+			{% endfor %}
+			{% for i in datergi %}
+				<div class="form-group">
+					<label class="sr-only" for="{{i.ctid}}">{{i.title}}</label>
+					<input type="hidden" id="{{i.ctid}}" class="datergi-res" name="{{i.ctname}}"/>
+					<input type="text" class="form-control datergi-st" id="rgl_{{i.ctid}}" name="{{i.ctname}}" placeholder="{{i.title}}(起始日期)" value="{{i.valuest}}" />~
+					<input type="text" class="form-control datergi-ed" id="rgr_{{i.ctid}}" name="{{i.ctname}}" placeholder="{{i.title}}(结束日期)" value="{{i.valueed}}" />
+				</div>
+			{% endfor %}
+			{% for i in scitems %}
+				<div class="form-group">
+					<label for="{{i.ctid}}">{{i.title}}</label>
+					<select class="form-control" id="{{i.ctid}}" name="{{i.ctname}}">
+						<option value="all">全部</option>
+						{% for j in i.oplst %}
+							<option value="{{forloop.counter0}}">{{j}}</option>
+						{% endfor %}
+					</select>
+				</div>
+			{% endfor %}
+			{% for i in mcitems %}
+				<div class="form-group">
+					<label for="{{i.ctid}}">{{i.title}}</label>
+					<input type="hidden" id="smf_{{i.ctid}}" class="cmcres" name="{{i.ctname}}"/>
+					<select multiple class="form-control cmcbox" id="{{i.ctid}}">
+						{% for j in i.oplst %}
+							<option value="{{forloop.counter0}}">{{j}}</option>
+						{% endfor %}
+					</select>
+				</div>
+			{% endfor %}
+			<button type="submit" class="btn btn-primary">
+				<span class="glyphicon glyphicon-ok btn-xs"></span>
+				提交
+			</button>
+		</form>
+		<script type="text/javascript">
+			function InitSC(){
+				{% for i in scitems %}
+				$("#{{i.ctid}}").val("{{i.value}}");
+				{% endfor %}
+			}
+			function MCSet(ctid,sllt){
+				var ar=Array();
+				ar=sllt.split(',');
+				for (var i = ar.length - 1; i >= 0; i--) {
+					var ia=ar[i];
+					console.log("#"+ctid+" option[value="+ia+"]");
+					$("#"+ctid+" option[value="+ia+"]").attr('selected',true);
+				};
+				$("#"+ctid).val("{{i.value}}");
+			}
+			function InitMC(){
+				{% for i in mcitems %}
+				MCSet("{{i.ctid}}","{{i.value}}");
+				{% endfor %}
+			}
+			function procFilterData(){
+				$(".datergi-res").each(
+					function(){
+						var oid=$(this).attr('id');
+						if($('#rgl_'+oid).val() && $('#rgr_'+oid).val()){
+							$(this).val($('#rgl_'+oid).val()+"~"+$('#rgr_'+oid).val());
+						}else{
+							$(this).remove();
+						}
+						$('#rgl_'+oid).remove();
+						$('#rgr_'+oid).remove();
+					}
+				);
+				$(".cmcbox").each(
+					function(){
+						var sla=Array();
+						var oid=$(this).attr('id');
+						var sol=$("#"+oid+' option:selected');
+						for (var i = sol.length - 1; i >= 0; i--) {
+							var iv=$(sol[i]);
+							sla.push(iv.val());
+						};
+						$("#smf_"+oid).val(sla.join(','));
+						//$(this).remove();
+					}
+				);
+				
+				$("select").each(
+					function(){
+						if(!$(this).val()){
+							$(this).remove();
+						}
+						if($(this).val()=="all"){
+							$(this).remove();
+						}
+					}
+				);
+				$("input").each(
+					function(){
+						if(!$(this).val()){
+							$(this).remove();
+						}
+					}
+				);
+				//return confirm('确认***吗??');
+			}
+			InitSC();
+			InitMC();
+		</script>
+	</div>
+</div>

+ 19 - 0
templates/common/paginator.html

@@ -0,0 +1,19 @@
+<!-- 分页功能 -->
+    {% load httpgetargs %}
+    第 {{ lPage.number }} 页,共 {{ lPage.paginator.num_pages }} 页,共 {{ lPage.paginator.count }} 项。
+    <ul class="pager pull-right" style="margin: -5px 0;">
+        <li><a href="?{% HttpGetArgsAddOne "page" "1" %}">首页</a></li>
+    
+        {% if lPage.has_previous %}
+            <li><a href="?{% HttpGetArgsAddOne "page" lPage.previous_page_number %}">上一页</a></li>
+        {% else %}
+            <li class="disabled"><a onclick="javascript:return false;">上一页</a></li>
+        {% endif %}
+    
+        {% if lPage.has_next %}
+            <li><a href="?{% HttpGetArgsAddOne "page" lPage.next_page_number %}">下一页</a></li>
+        {% else %}
+            <li class="disabled"><a onclick="javascript:return false;">下一页</a></li>
+        {% endif %}
+        <li><a href="?{% HttpGetArgsAddOne "page" lPage.paginator.num_pages %}">尾页</a></li>
+    </ul>

+ 9 - 0
templates/footer.backend.html

@@ -0,0 +1,9 @@
+<!-- footer -->
+<link rel="stylesheet" type="text/css" href="/static/css/footer.height.css">
+<div class="footer">
+	<div class="container col-footer">
+		<center>
+			<p class="text-muted">&copy; ZPC <a href="http://www.czq233.com/">CZQ</a>&amp;<a href="http://www.swzry.com/">ZRY</a> 2015. All rights reserved. </p>
+		</center>
+	</div>
+</div>

+ 18 - 0
templates/footer.html

@@ -0,0 +1,18 @@
+<!-- footer -->
+<link rel="stylesheet" type="text/css" href="/static/css/footer.height.css">
+<div class="footer">
+	<div class="container col-footer">
+		<div class="row">
+			<div class="col-footer col-md-4 col-xs-6">
+				<br/>
+				{{footleft|safe}}
+				<div></div>
+			</div>
+			<div class="col-footer col-md-4 col-md-offset-4 col-xs-6">
+				<br/>
+				{{footright|safe}}
+				<div></div>
+			</div>
+		</div>
+	</div>
+</div>

+ 62 - 0
templates/home.html

@@ -0,0 +1,62 @@
+{% extends "layout.html" %}
+
+{% block title %}
+    {% include "var/sitename.html" %}
+{% endblock %}
+
+{% block content %}
+
+{% url "ms_mailbox" as mailbox %}
+{% url "ms_lmform" as leavemsgurl %}
+{% url "cs_ubook" as counselurl %}
+
+<div class="section section-breadcrumbs">
+	<div class="container">
+		<div class="row">
+			<div class="col-md-12">
+				<h1>{% include "var/sitename.html" %}</h1>
+			</div>
+		</div>
+	</div>
+</div>
+<hr/>
+
+<div class="well well-lg"  style="background:#FFF; color:#000">
+	<h3>您好,{{request.user.nickname}}</h3>
+	<h5>现在是 <span id="labelClock"></span></h5>
+	<h5>您有 <span id="mailalt"></span> 封未读邮件。 <a href="{{mailbox}}">查看站内信箱 &raquo;</a></h5>
+</div>
+
+<div class="section">
+
+    	<div class="row">
+    		<div class="col-md-4 col-sm-6">
+    			<div class="service-wrapper">
+        			<img src="/static/img/large_icons/ruler.png" alt="Service 1">
+        			<h3>心理测试</h3>
+        			<p>心理测试简介</p>
+        			<a class="btn btn-default" href={% url "userexam" 1 %}  role="button">开始测试 &raquo;</a>
+        		</div>
+    		</div>
+    		<div class="col-md-4 col-sm-6">
+    			<div class="service-wrapper">
+        			<img src="/static/img/large_icons/box.png" alt="Service 1">
+        			<h3>心理咨询</h3>
+        			<p>心理咨询介绍</p>
+        			<a class="btn btn-default" href="{{counselurl}}" role="button">开始咨询 &raquo;</a>
+        		</div>
+    		</div>
+    		<div class="col-md-4 col-sm-6">
+    			<div class="service-wrapper">
+        			<img src="/static/img/large_icons/chat.png" alt="Service 1">
+        			<h3>建议与留言</h3>
+        			<p>建议与留言说明</p>
+        			<a class="btn btn-default" href="{{leavemsgurl}}" role="button">进入留言 &raquo;</a>
+        		</div>
+    		</div>
+    	</div>
+
+</div>
+<script type="text/javascript" src="/static/js/jquery.timer.js"></script>
+<script type="text/javascript" src="/static/js/homepage.js"></script>
+{% endblock %}

+ 160 - 0
templates/layout.html

@@ -0,0 +1,160 @@
+<!DOCTYPE html>
+<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
+<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
+<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
+    <head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="renderer" content="webkit">
+        
+        <title>{% block title %}{% include "var/sitename.html" %}{% endblock %}</title>
+        
+        <!-- Bootstrap -->
+        <link href="/static/css/bootstrap.css" rel="stylesheet">
+        <link href="/static/css/common.css" rel="stylesheet">
+        <link rel="stylesheet" type="text/css" href="/static/css/footer.css">
+        <script src="/static/js/jquery.min.js"></script>
+        <script src="/static/js/jquery.myext.js"></script> 
+        <script src="/static/js/bootstrap.min.js"></script> 
+        <link href="/static/css/bootstrap-datetimepicker.min.css" rel="stylesheet">
+        <link rel="stylesheet" href="/static/css/icomoon-social.css">
+
+        <link rel="stylesheet" href="/static/css/leaflet.css" />
+		<!--[if lte IE 8]>
+		    <link rel="stylesheet" href="/static/css/leaflet.ie.css" />
+		<![endif]-->
+		<link rel="stylesheet" href="/static/css/main.css">
+
+        <script src="/static/js/modernizr-2.6.2-respond-1.1.0.min.js"></script>
+        {% block head %}{% endblock %}
+
+    </head>
+    
+    <body>
+ <!-- 导航栏 -->
+{% url "ms_smform" as smurl %}
+{% url "ms_mailbox" as mburl %}
+{% url "cs_uhist" "all" as uhurl %}
+<div class="mainmenu-wrapper">
+  <div class="container">
+           <div class="menuextras">
+
+					<div class="extras">
+						<ul>
+				 {% if user.is_authenticated %}
+                            {% if user.is_superuser %}
+                            <li><span class="glyphicon glyphicon-wrench btn-xs"></span><a href='/admin'><b>管理后台</b></a></li>
+                            {% endif %}
+                            {% ifequal user.role.name "心理咨询师" %}
+                            <li><span class="glyphicon glyphicon-wrench btn-xs"></span><a href="{% url 'cs_admin' %}"><b>咨询师后台</b></a></li>
+                            {% endifequal %}
+                            <li class="envelope-items dropdown"><span class="glyphicon glyphicon-envelope icon-white"></span><a href="" data-toggle="dropdown"><b>通知</b><b class="caret"></b></a>
+                            <span id="navmsgalt" class="badge"></span>
+                            <ul class="dropdown-menu" role="menu">
+                                <li role="menuitem"><a href="{{mburl}}">进入邮箱</a></li>
+                                <li role="menuitem"><a href="{{smurl}}">撰写邮件</a></li>
+                            </ul>
+                            </li>
+                        <li class="dropdown">
+                            <a href="" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-user"></span><b>{{ request.user.username }}</b><b class="caret"></b></a>
+                            <ul class="dropdown-menu" role="menu">
+                            	<li role="menuitem"><a href="{% url 'changeuserurl' %}">修改个人资料</a></li>
+                                <li role="menuitem"><a href="{% url 'changepasswordurl' %}">修改密码</a></li>
+                                {% ifnotequal user.role.name "心理咨询师" %}
+                                <li role="menuitem"><a href='{{uhurl}}'>咨询预约记录</a></li>
+                                {% endifnotequal %}
+                                <li role="menuitem"><a href="{% url 'logouturl' %}">注销登陆</a></li>
+                            </ul>
+                        </li>
+
+                {% else %}
+                    <li {% if 'login' in request.path %} class="active" {% endif %}><a href="{% url 'loginurl' %}"><b>登陆</b></a></li>
+                {% endif %}
+			        	</ul>
+					</div>
+			</div>
+            <nav id="mainmenu" class="mainmenu">
+                {% if user.is_authenticated %}
+                    <ul>
+                    	<li class="logo-wrapper"><a href="/"><img src="/static/img/logo.png"></a></li>
+                        <li {% if request.path = '/' %} class="active" {% endif %}><a href="/">主页</a></li>
+                        <li {% if 'about' in request.path %} class="active" {% endif %}><a href="/about">关于</a></li>
+                    </ul>
+
+                {% else %}
+                    <ul>
+                    	<li class="logo-wrapper"><a href="/"><img src="/static/img/logo.png"></a></li>
+                    	<li {% if request.path = '/' %} class="active" {% endif %}><a href="/">主页</a></li>
+                        <li {% if 'about' in request.path %} class="active" {% endif %}><a href="/about">关于</a></li>
+                    </ul>
+                {% endif %}
+            </nav>
+    <!--/.nav-collapse --> 
+  </div>
+ </div>
+
+
+
+        <!-- 内容区域 -->
+<div class="container" style="width:90%">
+    <br />
+    <div class="row">
+        <div class="col-md-2">
+            {% include "leftmenu.html" %}
+        </div>
+        <div class="col-md-10">
+            {% block content %}{% endblock %}
+        </div>
+    </div>
+</div>
+
+
+         {% include "var/footer.html" %}
+         <script src="/static/js/jquery.fitvids.js"></script>
+        <script src="/static/js/jquery.sequence-min.js"></script>
+        <script src="/static/js/jquery.bxslider.js"></script>
+        <script src="/static/js/main-menu.js"></script>
+        <script src="/static/js/template.js"></script>
+        <script src="/static/js/navmsg.js"></script>
+        <script src="/static/js/bootstrap-datetimepicker.min.js"></script> 
+        <script src="/static/js/bootstrap-datetimepicker.zh-CN.js"></script>
+        <script>
+$(function(){
+ //页面初始化
+ window.onload=function(){
+ $("#j-event-list li:first").trigger("click");//触发:用户选择事件
+ $("#go12").trigger("click");//触发:查询
+ };
+
+ $('.form_date').datetimepicker({
+ language: 'zh-CN',
+ weekStart: 1,
+ todayBtn: 1,
+ autoclose: 1,
+ todayHighlight: 1,
+ startView: 2,
+ minView: 2,
+ forceParse: 0,
+ pickerPosition: "bottom-left"
+ });
+
+ $("#j-wds-ctl").bind("click",function(){
+ if($(this).find("i").hasClass("glyphicon-th-list")){
+ $(this).find("i").removeClass("glyphicon-th-list").addClass("glyphicon-fullscreen");
+ $(".G-wrap-fluid").addClass("G-wrap-static");
+ }else{
+ $(this).find("i").removeClass("glyphicon-fullscreen").addClass("glyphicon-th-list");
+ $(".G-wrap-fluid").removeClass("G-wrap-static");
+ };
+ $(window).trigger("resize");
+ $("#j-chart").hide().delay(100).fadeIn();
+ return false;
+ });
+
+ });
+</script>
+
+    </body>
+</html>

+ 145 - 0
templates/leftmenu.html

@@ -0,0 +1,145 @@
+<div class="panel-group" id="accordionSidebar">
+    <div class="panel panel-primary">
+        <div class="panel-heading">
+            <h4 class="panel-title">
+                <span class="glyphicon glyphicon-user btn-xs"></span>个人信息中心
+            </h4>
+        </div>
+        <table class="table">
+            <tbody>
+            <tr>
+                <td>
+                    <span class="glyphicon glyphicon-envelope btn-xs"></span><a href="{% url 'ms_mailbox' %}">我的信息</a>
+                </td>
+            </tr>
+            <!--<tr>
+                <td>
+                    <span class="glyphicon glyphicon-pencil btn-xs"></span><a href="{% url 'ms_smform' %}">发送站内信</a>
+                </td>
+            </tr>-->
+            <tr>
+                <td>
+                    <span class="glyphicon glyphicon-list-alt btn-xs"></span><a href="{% url 'changeuserurl' %}">修改个人资料</a>
+                </td>
+            </tr>
+            <tr>
+                <td>
+                    <span class="glyphicon glyphicon-asterisk btn-xs"></span><a href="{% url 'changepasswordurl' %}">修改密码</a>
+                </td>
+            </tr>
+            <!--<tr>
+                <td>
+                    <span class=" glyphicon glyphicon-tag btn-xs"></span><a href="{% url 'changepasswordurl' %}">我的评语</a>
+                </td>
+            </tr>-->
+        </tbody></table>
+    </div>
+    <div class="panel panel-primary">
+        <div class="panel-heading">
+            <h4 class="panel-title">
+                <span class="glyphicon glyphicon-edit btn-xs"></span>心理评测中心
+            </h4>
+        </div>
+        <table class="table">
+            <tbody>
+            <tr>
+                <td>
+                    <span class="glyphicon glyphicon-thumbs-up btn-xs"></span><a href="{% url 'userexam' 1 %}">心理自测</a>
+                </td>
+            </tr>
+            <tr>
+                <td>
+                    <span class="glyphicon glyphicon-th-list btn-xs"></span><a href="{% url 'userexam' 2 %}">心理普查</a>
+                </td>
+            </tr>
+            <tr>
+            	   <td>
+                	<span class="glyphicon glyphicon-ok btn-xs"></span><a href="{% url 'finishedexam' %}">我的评测记录</a>
+                </td>
+          </tr>
+        </tbody></table>
+    </div>
+    <div class="panel panel-primary">
+        <div class="panel-heading">
+            <h4 class="panel-title">
+                <span class="glyphicon glyphicon-heart btn-xs"></span>心理咨询中心
+            </h4>
+        </div>
+        <table class="table">
+            <tbody>
+            {% ifnotequal user.role.name "心理咨询师" %}
+            <tr>
+                <td>
+                    <span class="glyphicon glyphicon-comment btn-xs"></span><a href="{% url 'ms_lmform' %}">问题留言</a>
+                </td>
+            </tr>
+            <tr>
+                <td>
+                    <span class="glyphicon glyphicon-indent-left btn-xs"></span><a href="{% url 'ms_lmhist' %}">留言记录</a>
+                </td>
+            </tr>
+            <tr>
+                <td>
+                    <span class="glyphicon glyphicon-copy btn-xs"></span><a href="{% url 'cs_ubook' %}">预约咨询</a>
+                </td>
+            </tr>
+            <tr>
+                <td>
+                    <span class="glyphicon glyphicon-menu-hamburger btn-xs"></span><a href="{% url 'cs_uhist' 'all' %}">预约咨询记录</a>
+                </td>
+            </tr>
+            {% endifnotequal %}
+            {% ifequal user.role.name "心理咨询师" %}
+            <tr>
+                <td>
+                    <span class="glyphicon glyphicon-sort-by-attributes btn-xs"></span><a href="{% url 'cs_booklist' %}">处理预约单</a>
+                </td>
+            </tr>
+            <tr>
+                <td>
+                    <span class="glyphicon glyphicon-menu-hamburger btn-xs"></span><a href="{% url 'cs_bhist' 'all' %}">预约记录</a>
+                </td>
+            </tr>
+            {% endifequal %}
+        </tbody></table>
+    </div>
+    <div class="panel panel-primary">
+        <div class="panel-heading">
+            <h4 class="panel-title">
+                <span class="glyphicon glyphicon-globe btn-xs"></span>站务相关
+            </h4>
+        </div>
+        <table class="table">
+            <tbody>
+            <tr>
+                <td>
+                    <span class="glyphicon glyphicon-comment btn-xs"></span><a href="{% url 'ms_lmform' %}">网站留言板</a>
+                </td>
+            </tr>
+            <tr>
+                <td>
+                    <span class="glyphicon glyphicon-sunglasses btn-xs"></span><a href="{% url 'aboutus' %}">关于我们</a>
+                </td>
+            </tr>
+        </tbody></table>
+    </div>
+    {% block extmenu %}{% endblock %}
+</div>
+
+<!--
+            {% if user.is_superuser %}
+            <tr>
+                <td>
+                    <span class="glyphicon glyphicon-wrench btn-xs"></span><a href="/admin/">管理后台</a>
+                </td>
+            </tr>
+            {% endif %}
+
+            {% ifequal user.role.name "心理咨询师" %}
+            <tr>
+                <td>
+                    <span class="glyphicon glyphicon-wrench btn-xs"></span><a href="{% url 'cs_admin' %}">咨询师后台</a>
+                </td>
+            </tr>
+            {% endifequal %}
+-->

+ 353 - 0
templates/sidebar.html

@@ -0,0 +1,353 @@
+<div class="panel-group" id="sidebar_menu" role="tablist" aria-multiselectable="true">
+    <div class="panel panel-primary">
+        <div class="panel-heading" role="tab" id="sm_h_sysconf">
+            <h4 class="panel-title">
+                <span role="button" onclick="rec_menupos(0)" data-toggle="collapse" data-parent="#sidebar_menu" href="#sm_b_sysconf" aria-expanded="true" aria-controls="sm_b_sysconf">
+                    <span class="glyphicon glyphicon-list-alt btn-xs"></span>
+                    系统常规设置
+                </span>
+            </h4>
+        </div>
+        <div id="sm_b_sysconf" class="panel-collapse collapse" role="tabpanel" aria-labelledby="sm_h_sysconf">
+            <table class="table">
+                <tbody>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-list-alt btn-xs"></span>
+                            <a href={% url "ms_info" %}>修改网站信息</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-user btn-xs"></span>
+                            <a href={% url "listroleurl" %}>角色类型设置</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-lock btn-xs"></span>
+                            <a href={% url "listrolepermission" %}>角色权限设置</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-th btn-xs"></span>
+                            <a href={% url "listgroupurl" %}>角色分组设置</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-wrench btn-xs"></span>
+                            <a href={% url "addadminurl" %}>添加管理人员</a>
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+        </div>
+    </div>
+    <div class="panel panel-primary">
+        <div class="panel-heading" role="tab" id="sm_h_usermgr">
+            <h4 class="panel-title">
+                <span role="button" onclick="rec_menupos(1)" data-toggle="collapse" data-parent="#sidebar_menu" href="#sm_b_usermgr" aria-expanded="true" aria-controls="sm_b_usermgr">
+                    <span class="glyphicon glyphicon-user btn-xs"></span>
+                    人员信息管理
+                </span>
+            </h4>
+        </div>
+        <div id="sm_b_usermgr" class="panel-collapse collapse" role="tabpanel" aria-labelledby="sm_h_usermgr">
+            <table class="table">
+                <tbody>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-open btn-xs"></span>
+                            <a href={% url "addxlsuserurl" %}>人员批量导入</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-plus btn-xs"></span>
+                            <a href={% url "adduserurl" %}>个别人员添加</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-search btn-xs"></span>
+                            <a href={% url "listuserurl" %}>人员信息查询修改</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-eye-open btn-xs"></span>
+                            <a href={% url "listnewuserurl" %}>审核自助注册</a>
+                        </td>
+                    </tr>
+
+                </tbody>
+            </table>
+        </div>
+    </div>
+    <div class="panel panel-primary">
+        <div class="panel-heading" role="tab" id="sm_h_psyexam">
+            <h4 class="panel-title">
+                <span role="button" onclick="rec_menupos(2)" data-toggle="collapse" data-parent="#sidebar_menu" href="#sm_b_psyexam" aria-expanded="true" aria-controls="sm_b_psyexam">
+                    <span class="glyphicon glyphicon-heart btn-xs"></span>
+                    心理测量管理
+                </span>
+            </h4>
+        </div>
+        <div id="sm_b_psyexam" class="panel-collapse collapse" role="tabpanel" aria-labelledby="sm_h_psyexam">
+            <table class="table">
+                <tbody>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-book btn-xs"></span>
+                            <a href="{% url 'epg_elist' %}">量表平台管理</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-edit btn-xs"></span>
+                            <a href="{% url 'proj_plist' %}">测验方案管理</a>
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+        </div>
+    </div>
+    <div class="panel panel-primary">
+        <div class="panel-heading" role="tab" id="sm_h_examdoc">
+            <h4 class="panel-title">
+                <span role="button" onclick="rec_menupos(3)" data-toggle="collapse" data-parent="#sidebar_menu" href="#sm_b_examdoc" aria-expanded="true" aria-controls="sm_b_examdoc">
+                    <span class="glyphicon glyphicon-folder-open btn-xs"></span>
+                    测评档案管理
+                </span>
+            </h4>
+        </div>
+        <div id="sm_b_examdoc" class="panel-collapse collapse" role="tabpanel" aria-labelledby="sm_h_examdoc">
+            <table class="table">
+                <tbody>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-search btn-xs"></span>
+                            <a href={% url "projxlib" %}>测评档案查询</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-save btn-xs"></span>
+                            <a href="{% url 'projlib' %}">测评档案生成导出</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-search btn-xs"></span>
+                            <a href={% url "projxrecode" %}>测评报告查询</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-save btn-xs"></span>
+                            <a href="{% url 'projrecode' %}">测评报告生成导出</a>
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+        </div>
+    </div>
+    <div class="panel panel-primary">
+        <div class="panel-heading" role="tab" id="sm_h_customsvr">
+            <h4 class="panel-title">
+                <span role="button" onclick="rec_menupos(4)" data-toggle="collapse" data-parent="#sidebar_menu" href="#sm_b_customsvr" aria-expanded="true" aria-controls="sm_b_customsvr">
+                    <span class="glyphicon glyphicon-heart-empty btn-xs"></span>
+                    心理咨询管理
+                </span>
+            </h4>
+        </div>
+        <div id="sm_b_customsvr" class="panel-collapse collapse" role="tabpanel" aria-labelledby="sm_h_customsvr">
+            <table class="table">
+                <tbody>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-user btn-xs"></span>
+                            <a href={% url "cs_wsa_reg" %}>咨询师管理</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-time btn-xs"></span>
+                            <a href="{% url 'cs_wsabhist' %}">预约管理</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-comment btn-xs"></span>
+                            <a href={% url "lmbrurl" %}>留言管理</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-pencil btn-xs"></span>
+                            <a href="{% url 'cs_interview' %}">访谈管理</a>
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+        </div>
+    </div>
+    <div class="panel panel-primary">
+        <div class="panel-heading" role="tab" id="sm_h_terrism">
+            <h4 class="panel-title">
+                <span role="button" onclick="rec_menupos(5)" data-toggle="collapse" data-parent="#sidebar_menu" href="#sm_b_terrism" aria-expanded="true" aria-controls="sm_b_terrism">
+                    <span class="glyphicon glyphicon-alert btn-xs"></span>
+                    危机干预管理
+                </span>
+            </h4>
+        </div>
+        <div id="sm_b_terrism" class="panel-collapse collapse" role="tabpanel" aria-labelledby="sm_h_terrism">
+            <table class="table">
+                <tbody>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-flash btn-xs"></span>
+                            <a href={% url "projdanger" %}>高危个体筛查</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-th-list btn-xs"></span>
+                            <a href="{% url 'dfadd' %}">预警方案设置</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-pencil btn-xs"></span>
+                            <a href="{% url 'dflist' %}">生成预警报表</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-pencil btn-xs"></span>
+                            <a href="{% url 'dfreportall' %}">预警总报表</a>
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+        </div>
+    </div>
+    <div class="panel panel-primary">
+        <div class="panel-heading" role="tab" id="sm_h_datamgr">
+            <h4 class="panel-title">
+                <span role="button" onclick="rec_menupos(6)" data-toggle="collapse" data-parent="#sidebar_menu" href="#sm_b_datamgr" aria-expanded="true" aria-controls="sm_b_datamgr">
+                    <span class="glyphicon glyphicon-hdd btn-xs"></span>
+                    测验数据管理
+                </span>
+            </h4>
+        </div>
+        <div id="sm_b_datamgr" class="panel-collapse collapse" role="tabpanel" aria-labelledby="sm_h_datamgr">
+            <table class="table">
+                <tbody>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-open btn-xs"></span>
+                            <a href={% url "dataqimport" %}>测评数据导入</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-pencil btn-xs"></span>
+                            <a href="{% url 'dataqinput' %}">数据手工录入</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-save btn-xs"></span>
+                            <a href={% url "dataload" %}>数据恢复</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class=" glyphicon glyphicon-floppy-disk btn-xs"></span>
+                            <a href="{% url 'databakv' %}">数据备份</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class=" glyphicon glyphicon-floppy-disk btn-xs"></span>
+                            <a href="{% url 'dfrecexport' %}">测评数据导出</a>
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+        </div>
+    </div>
+        <div class="panel panel-primary">
+        <div class="panel-heading" role="tab" id="sm_h_report">
+            <h4 class="panel-title">
+                <span role="button" onclick="rec_menupos(7)" data-toggle="collapse" data-parent="#sidebar_menu" href="#sm_b_report" aria-expanded="true" aria-controls="sm_b_report">
+                    <span class=" glyphicon glyphicon-file btn-xs"></span>
+                    工作报表管理
+                </span>
+            </h4>
+        </div>
+        <div id="sm_b_report" class="panel-collapse collapse" role="tabpanel" aria-labelledby="sm_h_report">
+            <table class="table">
+                <tbody>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-list btn-xs"></span>
+                            <a href={% url "rss_rslist" %}>案例情况汇报表</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-calendar btn-xs"></span>
+                            <a href="{% url 'rss_mrslist' %}">管理月报表</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-blackboard btn-xs"></span>
+                            <a href="{% url 'rss_mrslist_ro' %}">查看月报表</a>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <span class="glyphicon glyphicon-eye-open btn-xs"></span>
+                            <a href={% url "rss_print" %}>浏览总结表</a>
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+        </div>
+    </div>
+</div>
+
+<script src="/static/js/jquery.cookie.js"></script>
+<script type="text/javascript">
+    menuid_list=[
+        "#sm_b_sysconf",
+        "#sm_b_usermgr",
+        "#sm_b_psyexam",
+        "#sm_b_examdoc",
+        "#sm_b_customsvr",
+        "#sm_b_terrism",
+        "#sm_b_datamgr",
+        "#sm_b_report"
+    ];
+    function LoadMenuPos(){
+        for (var i = menuid_list.length - 1; i >= 0; i--) {
+            var mnid=menuid_list[i];
+            $(mnid).collapse('hide');
+        };
+        var posid = $.cookie('backend_menupos');
+        if(!posid){
+            posid = 0;
+        }
+        $(menuid_list[posid]).collapse('show');
+    }
+    function rec_menupos(mpos){
+        $.cookie('backend_menupos', mpos, { path: "/"});
+        LoadMenuPos();
+    }
+    LoadMenuPos();
+</script>

+ 41 - 0
vote/urls.py

@@ -0,0 +1,41 @@
+from django.conf.urls import patterns, include, url
+
+urlpatterns = patterns('UserManage.views',
+    url(r'^login/$', 'user.LoginUser', name='loginurl'),
+    url(r'^logout/$', 'user.LogoutUser', name='logouturl'),
+    url(r'^signup/$', 'user.SignUp', name='signupurl'),
+
+    url(r'^user/add/$', 'user.AddUser', name='adduserurl'),
+    url(r'^user/addadmin/$', 'user.AddAdmin', name='addadminurl'),
+    url(r'^user/removes/$', 'user.RemoveUsers', name='removesusersurl'),
+    url(r'^user/addxls/$', 'user.XLSFileUser', name='addxlsuserurl'),
+    url(r'^user/list/$', 'user.ListUser', name='listuserurl'),
+    url(r'^user/listnew/$', 'user.ListNewUser', name='listnewuserurl'),
+    url(r'^user/edit/(?P<ID>\d+)/$', 'user.EditUser', name='edituserurl'),
+    url(r'^user/delete/(?P<ID>\d+)/$', 'user.DeleteUser', name='deleteuserurl'),
+    url(r'^user/xlserror/$', 'user.AddXlsError', name='addxlserror'),
+
+    url(r'^user/changepwd/$', 'user.ChangePassword', name='changepasswordurl'),
+    url(r'^user/resetpwd/(?P<ID>\d+)/$', 'user.ResetPassword', name='resetpasswordurl'),
+    url(r'^user/changeinfo/$', 'user.ChangInfo', name='changeuserurl'),
+
+    url(r'^role/add/$', 'role.AddRole', name='addroleurl'),
+    url(r'^role/list/$', 'role.ListRole', name='listroleurl'),
+    url(r'^role/permission/$', 'role.ListPRole', name='listrolepermission'),
+    url(r'^role/edit/(?P<ID>\d+)/$', 'role.EditRole', name='editroleurl'),
+    url(r'^role/delete/(?P<ID>\d+)/$', 'role.DeleteRole', name='deleteroleurl'),
+
+    url(r'^group/add/$', 'group.AddGroup', name='addgroupurl'),
+    url(r'^group/addxls/$', 'group.XLSFileGroup', name='addxlsgroupurl'),
+    url(r'^group/removes/$', 'group.RemoveGroups', name='removegroupsurl'),
+    url(r'^group/list/$', 'group.ListGroup', name='listgroupurl'),
+    url(r'^group/edit/(?P<ID>\d+)/$', 'group.EditGroup', name='editgroupurl'),
+    url(r'^group/delete/(?P<ID>\d+)/$', 'group.DeleteGroup', name='deletegroupurl'),
+
+    url(r'^permission/deny/$', 'permission.NoPermission', name='permissiondenyurl'),
+
+    url(r'^permission/add/$', 'permission.AddPermission', name='addpermissionurl'),
+    url(r'^permission/list/$', 'permission.ListPermission', name='listpermissionurl'),
+    url(r'^permission/edit/(?P<ID>\d+)/$', 'permission.EditPermission', name='editpermissionurl'),
+    url(r'^permission/delete/(?P<ID>\d+)/$', 'permission.DeletePermission', name='deletepermissionurl'),
+)