131 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			131 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
	
| import json
 | |
| import re
 | |
| 
 | |
| from django.views.generic.base import View
 | |
| from django.shortcuts import HttpResponse, get_object_or_404
 | |
| from django.views.generic import TemplateView,CreateView,UpdateView
 | |
| from django.contrib.auth import get_user_model
 | |
| from django.shortcuts import render
 | |
| from django.forms.models import model_to_dict
 | |
| from safesite.models import Role,Menu
 | |
| 
 | |
| 
 | |
| class RoleView(TemplateView):
 | |
|     template_name = 'groups/role.html'
 | |
| 
 | |
| 
 | |
| class RoleListView(View):
 | |
|     def get(self, reqeust):
 | |
|         fields = ['id', 'name', 'desc']
 | |
|         ret = dict(data=list(Role.objects.values(*fields)))
 | |
|         return HttpResponse(json.dumps(ret), content_type='application/json')
 | |
| 
 | |
| 
 | |
| class RoleCreateView(CreateView):
 | |
|     model = Role
 | |
|     fields = '__all__'
 | |
|     template_name = 'groups/role_form.html'
 | |
|     def post(self, request, *args, **kwargs):
 | |
|         res = dict(result=False)
 | |
|         form = self.get_form()
 | |
|         if form.is_valid():
 | |
|             form.save()
 | |
|             res['result'] = True
 | |
|         else:
 | |
|             pattern = '<li>.*?<ul class=.*?><li>(.*?)</li>'
 | |
|             form_errors = str(form.errors)
 | |
|             errors = re.findall(pattern, form_errors)
 | |
|             res['error'] = errors[0]
 | |
|         return HttpResponse(json.dumps(res), content_type='application/json')
 | |
| 
 | |
| 
 | |
| class RoleDeleteView(View):
 | |
|     def post(self, request):
 | |
|         ret = dict(result=False)
 | |
|         if 'id' in request.POST and request.POST['id']:
 | |
|             id_list = map(int, request.POST['id'].split(','))
 | |
|             Role.objects.filter(id__in=id_list).delete()
 | |
|             ret['result'] = True
 | |
|         return HttpResponse(json.dumps(ret), content_type='application/json')
 | |
| 
 | |
| 
 | |
| class RoleUpdateView(UpdateView):
 | |
|     model = Role
 | |
|     fields = '__all__'
 | |
|     template_name = 'groups/role_update.html'
 | |
|     template_name_suffix = '_update'
 | |
| 
 | |
|     def get_object(self, queryset=None):
 | |
| 
 | |
|         if queryset is None:
 | |
|             queryset = self.get_queryset()
 | |
|         if 'id' in self.request.GET and self.request.GET['id']:
 | |
|             queryset = queryset.filter(id=int(self.request.GET['id']))
 | |
|         elif 'id' in self.request.POST and self.request.POST['id']:
 | |
|             queryset = queryset.filter(id=int(self.request.POST['id']))
 | |
|         else:
 | |
|             raise AttributeError("Generic detail view %s must be called with id. "
 | |
|                                  % self.__class__.__name__)
 | |
|         try:
 | |
|             obj = queryset.get()
 | |
|         except queryset.model.DoesNotExist:
 | |
|             raise Http404("No %(verbose_name)s found matching the query" %
 | |
|                           {'verbose_name': queryset.model._meta.verbose_name})
 | |
|         return obj
 | |
| 
 | |
|     def post(self, request, *args, **kwargs):
 | |
|         self.object = self.get_object()
 | |
|         res = dict(result=False)
 | |
|         form = self.get_form()
 | |
|         if form.is_valid():
 | |
|             form.save()
 | |
|             res['result'] = True
 | |
|         else:
 | |
|             pattern = '<li>.*?<ul class=.*?><li>(.*?)</li>'
 | |
|             form_errors = str(form.errors)
 | |
|             errors = re.findall(pattern, form_errors)
 | |
|             res['error'] = errors[0]
 | |
|         return HttpResponse(json.dumps(res), content_type='application/json')
 | |
| 
 | |
| class Role2MenuView(View):
 | |
|     """
 | |
|     角色绑定菜单
 | |
|     """
 | |
|     def get(self, request):
 | |
|         if 'id' in request.GET and request.GET['id']:
 | |
|             role = get_object_or_404(Role, pk=request.GET['id'])
 | |
|             ret = dict(role=role)
 | |
|             return render(request, 'groups/role_role2menu.html', ret)
 | |
| 
 | |
|     def post(self, request):
 | |
|         res = dict(result=False)
 | |
|         role = get_object_or_404(Role, pk=request.POST['id'])
 | |
|         tree = json.loads(self.request.POST['tree'])
 | |
|         role.permissions.clear()
 | |
|         for menu in tree:
 | |
|             if menu['checked'] is True:
 | |
|                 menu_checked = get_object_or_404(Menu, pk=menu['menuid'])
 | |
|                 role.permissions.add(menu_checked)
 | |
|         res['result'] = True
 | |
|         return HttpResponse(json.dumps(res), content_type='application/json')
 | |
| 
 | |
| class Role2MenuListView(View):
 | |
|     """
 | |
|     获取zTree菜单列表
 | |
|     """
 | |
|     def get(self, request):
 | |
|         fields = ['menuid', 'menuname', 'parentid']
 | |
|         menus = Menu.objects.all()
 | |
|         if 'id' in request.GET and request.GET['id']:
 | |
|             role = Role.objects.get(id=request.GET.get('id'))
 | |
|             role_menus = role.permissions.all().values_list('menuid',flat=True)
 | |
|             menusqlist = menus.values(*fields)
 | |
|             for i in menusqlist:
 | |
|                 if i['menuid'] in role_menus:
 | |
|                     i['checked'] = True
 | |
|                 else:
 | |
|                     i['checked'] = False
 | |
|             ret = dict(data=list(menusqlist))
 | |
|         else:
 | |
|             ret = dict(data=list(menus.values(*fields)))
 | |
|         return HttpResponse(json.dumps(ret), content_type='application/json') |