【发布时间】:2015-08-03 03:43:24
【问题描述】:
我正在尝试重构我的 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 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(r'^vehicles/inactive/?$', InactiveVehicleView.as_view())
有人知道我在身份验证和/或装饰器方面做错了什么吗?
【问题讨论】:
-
对,我也试过把 api_view 装饰器放在两个,但这无济于事。
-
@danielcorreia 我已经尝试按照基于类的视图文档来实现。但是没有提示如何使用 authentication_classes 和 permission_classes 装饰器以及如何获取认证用户的数据。
标签: python django django-rest-framework python-decorators