django restful框架&x27;s request.user有两种不同的类型和不同的值?

django restful框架&x27;s request.user有两种不同的类型和不同的值?,django,django-rest-framework,Django,Django Rest Framework,我是django rest框架的新手,我尝试了一个非常简单的web应用程序 一个节目 url.py urlpatterns = [ url(r'^admin/$', "app.views.admin_index"), ] urlpatterns = [ url(r'^admin/$', AdminViewSet.as_view({'get':'list'})), ] views.py def admin_index(request): print request

我是django rest框架的新手,我尝试了一个非常简单的web应用程序

一个节目

url.py

urlpatterns = [
    url(r'^admin/$', "app.views.admin_index"),
]
urlpatterns = [
    url(r'^admin/$', AdminViewSet.as_view({'get':'list'})),
]
views.py

def admin_index(request):
    print request
    print type(request.user)    
    return render(request, "admin/index.html")
class AdminViewSet(viewsets.ViewSet):
    permission_classes = (permissions.IsAdminUser,)
    renderer_classes = (renderers.TemplateHTMLRenderer,)    
    def list(self, request):
        print request
        print type(request.user)
        return Response(template_name='admin/index.html')
输出为

AnonymousUser
<class 'django.utils.functional.SimpleLazyObject'>
admin
<class 'django.contrib.auth.models.User'>
views.py

def admin_index(request):
    print request
    print type(request.user)    
    return render(request, "admin/index.html")
class AdminViewSet(viewsets.ViewSet):
    permission_classes = (permissions.IsAdminUser,)
    renderer_classes = (renderers.TemplateHTMLRenderer,)    
    def list(self, request):
        print request
        print type(request.user)
        return Response(template_name='admin/index.html')
输出为

AnonymousUser
<class 'django.utils.functional.SimpleLazyObject'>
admin
<class 'django.contrib.auth.models.User'>
它有“rest_framework.authentication.BasicAuthentication”,因此它将request.user存储在http头中,但不在会话中,因此django.contrib.auth的注销失败


解决方案是只使用“rest\u framework.authentication.SessionAuthentication”

类“django.utils.functional.SimpleLazyObject”
是一种承诺。计算时,它将充当延迟对象的代理。这里没有什么问题;django在很多地方都使用这种类型来实现惰性。

你说得对,我读过这篇文章,但我更关心不同的值,这让我很难评估loginedYou是否应该检查
用户。是否处于活动状态
用户。是否经过身份验证
来确定用户是否经过身份验证,而不是通过进行类型检查