基于 Django Class 的视图中的身份验证用户
Authentication User in Django Class Based Views
我正在尝试重构我的 Django 项目。
因此我想重构自:
@api_view([GET, POST])
@permission_classes((IsAuthenticated, VehiclePermissions, ))
def inactive_vehicle_view(request):
if request.method == "GET":
con = CBaseUtil.get_prod_instance()
vehicle_bo = VehicleBO()
dongle_dao = OBDDongleDAO(con)
since_days = int(request.GET.get("since", 28))
vehicles = vehicle_bo.find_vehicles_by_user_context(request.user.details)
return Response(vehicles, status=status_code, headers=get_headers(request))
像这样基于 class 的视图:
class InactiveVehicleView(View):
@authentication_classes((BasicAuthentication, WebsiteAuthentication))
@permission_classes((IsAuthenticated, VehiclePermissions, ))
def dispatch(self, *args, **kwargs):
return super(InactiveVehicleView, self).dispatch(*args, **kwargs)
def get(self, request):
con = CBaseUtil.get_prod_instance()
vehicle_bo = VehicleBO()
dongle_dao = OBDDongleDAO(con)
since_days = int(request.GET.get("since", 28))
vehicles = vehicle_bo.find_vehicles_by_user_context(request.user.details)
return Response(vehicles, status=status_code, headers=get_headers(request))
我面临的问题是我无法通过 request.user.details 获取旧版本中的用户详细信息,因为 WSGI-Request 不包含属性用户。我想我在装饰器上做错了什么,但我想不通。
仅供参考,视图在 url 中的映射如下:
url(r'^vehicles/inactive/?$', InactiveVehicleView.as_view())
有谁知道我在身份验证 and/or 装饰器方面做错了什么?
根据 Django Rest Framework Authentication Docs,您的视图应该子类化 APIView
,并将 authentication_classes
和 permission_classes
设置为属性而不是使用装饰器。
from rest_framework.views import APIView
class InactiveVehicleView(APIView):
authentication_classes = (BasicAuthentication, WebsiteAuthentication)
permission_classes = (IsAuthenticated, VehiclePermissions)
def get(self, request):
...
我正在尝试重构我的 Django 项目。 因此我想重构自:
@api_view([GET, POST])
@permission_classes((IsAuthenticated, VehiclePermissions, ))
def inactive_vehicle_view(request):
if request.method == "GET":
con = CBaseUtil.get_prod_instance()
vehicle_bo = VehicleBO()
dongle_dao = OBDDongleDAO(con)
since_days = int(request.GET.get("since", 28))
vehicles = vehicle_bo.find_vehicles_by_user_context(request.user.details)
return Response(vehicles, status=status_code, headers=get_headers(request))
像这样基于 class 的视图:
class InactiveVehicleView(View):
@authentication_classes((BasicAuthentication, WebsiteAuthentication))
@permission_classes((IsAuthenticated, VehiclePermissions, ))
def dispatch(self, *args, **kwargs):
return super(InactiveVehicleView, self).dispatch(*args, **kwargs)
def get(self, request):
con = CBaseUtil.get_prod_instance()
vehicle_bo = VehicleBO()
dongle_dao = OBDDongleDAO(con)
since_days = int(request.GET.get("since", 28))
vehicles = vehicle_bo.find_vehicles_by_user_context(request.user.details)
return Response(vehicles, status=status_code, headers=get_headers(request))
我面临的问题是我无法通过 request.user.details 获取旧版本中的用户详细信息,因为 WSGI-Request 不包含属性用户。我想我在装饰器上做错了什么,但我想不通。
仅供参考,视图在 url 中的映射如下:
url(r'^vehicles/inactive/?$', InactiveVehicleView.as_view())
有谁知道我在身份验证 and/or 装饰器方面做错了什么?
根据 Django Rest Framework Authentication Docs,您的视图应该子类化 APIView
,并将 authentication_classes
和 permission_classes
设置为属性而不是使用装饰器。
from rest_framework.views import APIView
class InactiveVehicleView(APIView):
authentication_classes = (BasicAuthentication, WebsiteAuthentication)
permission_classes = (IsAuthenticated, VehiclePermissions)
def get(self, request):
...