国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > 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            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成都市| 兴文县| 开江县| 石河子市| 都安| 读书| 蕲春县| 灵川县| 榕江县| 合肥市| 长白| 永兴县| 兰西县| 永康市| 衡东县| 博兴县| 新津县| 郎溪县| 家居| 肃北| 大丰市| 日土县| 高清| 霍林郭勒市| 苏尼特右旗| 罗城| 响水县| 靖西县| 曲周县| 徐水县| 灵川县| 平山县| 密云县| 平利县| 崇阳县| 舒兰市| 纳雍县| 那曲县| 湟中县| 通许县| 当阳市|