一、動态菜單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生成
#前端擷取權限,用于按鈕級别的權限檢驗
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中存儲的使用者權限。
作者:iveBoy
出處:http://www.cnblogs.com/shenjianping/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須在文章頁面給出原文連接配接,否則保留追究法律責任的權利。