2017-08-06 145 views
0

我試圖強制驗證以訪問我的API,但我的ViewSetpermission_classes = permissions.IsAuthenticated,)屬性似乎不起作用。因爲我稍後再嘗試訪問用戶的個人資料上時get_queryset(),我得到這樣的錯誤:無法在Django Rest Framework中強制執行驗證要求

TypeError: 'AnonymousUser' object is not iterable"

我也驗證我rest_framework設置中設置:

'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAuthenticated',), 

而且我也加入到這樣做對用戶配置文件中的其他業務邏輯檢查之前,我分派方法:

def dispatch(self, request, *args, **kwargs): 
    if not request.user.is_authenticated: 
     return Response(status=status.HTTP_401_UNAUTHORIZED) 

這不工作之一:

File "/lib/python3.5/site-packages/rest_framework/response.py", line 57, in rendered_content assert renderer, ".accepted_renderer not set on Response" AssertionError: .accepted_renderer not set on Response

爲什麼這些驗證控件都不起作用?

編輯:這裏有一個get_queryset()的簡化版本:

kwargs = {} 
for k,v in self.request.query_params.items(): 
    if not validate_that_key_is_an_actual_model_field(k): 
     return Response(status=status.HTTP_400_BAD_REQUEST) 
    kwargs[k] = v 
return Product.objects.filter(fk_client=self.client)\ 
    .filter(**kwargs)\ 
    .order_by('uuid')\ 
    .select_related('fk_user') 
+0

你能展示你的觀點嗎? – zaidfazil

+0

它有幾百行;你需要哪部分? – Escher

+0

至少你的'get_queryset()'方法,那麼? – zaidfazil

回答

0

原來我是做dispatch()那名之前超類的dispatch被稱爲執行一些其他的事情,之前因此訪問用戶的個人資料Http401可以由超類返回。另外,由於超類的調度還沒有被調用,渲染器沒有被正確初始化(取決於請求的內容頭),所以這是AssertionError: accepted_renderer not set on Response的來源。