麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

Django-Rest-Framework 權限管理源碼淺析(小結)

2020-02-15 23:38:55
字體:
來源:轉載
供稿:網友

在django的views中不論是用類方式還是用裝飾器方式來使用rest框架,django_rest_frame實現權限管理都需要兩個東西的配合: authentication_classespermission_classes

# 方式1: 裝飾器from rest_framework.decorators import api_view, authentication_classes, permission_classesfrom rest_framework.authentication import SessionAuthentication, BasicAuthenticationfrom rest_framework.permissions import AllowAnyfrom rest_framework.response import Response@api_view(["GET", ])@permission_classes([AllowAny,])@authentication_classes([SessionAuthentication, BasicAuthentication])def test_example(request): content = {   'user': unicode(request.user), # `django.contrib.auth.User` instance.   'auth': unicode(request.auth), # None  }  return Response(content)# ------------------------------------------------------------# 方式2: 類from rest_framework.authentication import SessionAuthentication, BasicAuthenticationfrom rest_framework.permissions import AllowAnyfrom rest_framework.response import Responsefrom rest_framework.views import APIViewclass ExampleView(APIView): authentication_classes = (SessionAuthentication, BasicAuthentication) permission_classes = (AllowAny,) def get(self, request, format=None):  content = {   'user': unicode(request.user), # `django.contrib.auth.User` instance.   'auth': unicode(request.auth), # None  }  return Response(content)

上面給出的是權限配置的默認方案,寫和不寫沒有區別。 rest框架有自己的settings文件 ,最原始的默認值都可以在里面找到:

說道rest的settings文件,要覆蓋其中的默認行為,特別是權限認證行為,我們只需要在 項目settings文件

中指定你自己的類即可:

REST_FRAMEWORK = { ... 'DEFAULT_AUTHENTICATION_CLASSES': (  'your_authentication_class_path', ), ...}

在rest的settings文件中,獲取屬性時,會優先加載項目的settings文件中的設置,如果項目中沒有的,才加載自己的默認設置:

初始化api_settings對象

api_settings = APISettings(None, DEFAULTS, IMPORT_STRINGS)

APISettings 類中獲取屬性時優先獲取項目的settings文件中 REST_FRAMEWORK 對象的值,沒有的再找自己的默認值

@propertydef user_settings(self): if not hasattr(self, '_user_settings'):  # _user_settings默認為加載項目settings文件中的REST_FRAMEWORK對象  self._user_settings = getattr(settings, 'REST_FRAMEWORK', {}) return self._user_settingsdef __getattr__(self, attr): if attr not in self.defaults:  raise AttributeError("Invalid API setting: '%s'" % attr) try:  # Check if present in user settings  # 優先加載user_settings,即項目的settings文件,沒有就用默認  val = self.user_settings[attr] except KeyError:  # Fall back to defaults  val = self.defaults[attr] # Coerce import strings into classes if attr in self.import_strings:  val = perform_import(val, attr) # Cache the result self._cached_attrs.add(attr) setattr(self, attr, val) return val            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲二区三区在线 | 999精品国产 | 欧美自拍三区 | 久久精品爱 | 日本不卡一区二区三区在线 | 92自拍视频 | 久久久一区二区三区四区 | 中文字幕在线观看精品 | 国产精品美女一区二区 | 黄色片网站免费看 | 欧美久久一区二区 | 免费久久精品 | 亚洲欧美一区二区三区在线观看 | 毛片毛片免费看 | 欧美国产精品久久 | 午夜视频久久 | 成人wxx视频免费 | 精精国产xxxx视频在线野外 | 久久精品一区二区三区四区五区 | 日本a∨精品中文字幕在线 被啪羞羞视频在线观看 | 亚洲综合视频一区 | 国产日韩在线视频 | 九九热免费视频在线观看 | 国内一区 | 久久色在线| 日本看片一区二区三区高清 | 羞羞视频免费网站男男 | 2021国产精品 | 欧美一级黄色免费看 | 久久免费视频在线 | 精国产品一区二区三区四季综 | 免费看黄色三级毛片 | 91精品国产乱码久 | 日韩色视频 | 久久精品视频69 | 看国产毛片 | 一级电影免费在线观看 | 12av电影| 精品国产乱码久久久久久久 | 精品小视频 | 国产精品视频一区二区三区四 |