django restful框架&x27;s request.user有两种不同的类型和不同的值?
我是django rest框架的新手,我尝试了一个非常简单的web应用程序 一个节目 url.pydjango 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
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是否应该检查用户。是否处于活动状态和用户。是否经过身份验证来确定用户是否经过身份验证,而不是通过进行类型检查