一、動態菜單API的生成
1、API
#菜單信息 url(r'^menus$', views.MenuModelView.as_view({"get": "list", }), name="menus-list"),
2、MenuModelView
from collections import OrderedDictclass MenuModelView(GenericViewSet): authentication_classes = [AuthToken] def list(self,request,*args,**kwargs): ret = {"data": {}, "meta": {"message": "獲取菜單成功", "code": 2000}} try: user = request.user menus_dict = InitPermission(request, user).init_menus_dict() od = OrderedDict() if menus_dict: for key in sorted(menus_dict): od[key] = menus_dict[key] ret["data"] = {"menus_list":od.values()} except Exception as e: ret["meta"]["message"] = "獲取菜單失敗" ret["meta"]["code"] = 2001 return Response(ret)
在restframework框架的認證組件中通過 authentication_classes = [AuthToken]進行認證,獲得user,從而傳入user,從而初始化菜單數據,然后根據數據庫中的positionid可以進行菜單排序。
認證參考:https://www.cnblogs.com/shenjianping/p/11387324.html
初始化菜單參考:https://www.cnblogs.com/shenjianping/p/11448427.html
二、權限API生成
1、API
#前端獲取權限,用於按鈕級別的權限檢驗 url(r'^roles/rights$',views.RightsView.as_view({"get": "list"}), name="roles-rights-list"),
2、RightsView
class RightsView(GenericViewSet): def list(self,request,*args,**kwargs): """ 從redis中獲取權限相關,用於前台按鈕級別權限檢驗 {'/crm/dept$': ['get'], 'rights/(?P<type>\\w+)$': ['get'], '/crm/menus': ['get'] :param request: :param args: :param kwargs: :return: """ #從redis中獲取permission_dict ret = {"data": {}, "meta": { "message": "獲取權限信息成功", "code": 2000}} try: permission_bytes = SessionStore().get_session(settings.PERMISSION_SESSION_KEY) permission_dict = eval(permission_bytes) ret["data"] = permission_dict except Exception as e: ret["meta"]["message"] = "獲取權限信息失敗" ret["meta"]["code"] = 2001 return Response(ret)
在用戶權限初始化后會將其保存在redis中,這里返回的就是在redis中存儲的用戶權限。