Mixin не работает без ошибок - Django - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь создать миксин для проверки токена доступа и некоторых условий. Но, похоже, это не работает. Даже я использую эту переменную accesstoken в TimesheetListApiV2, которая находится внутри AccessTokenMixin. Как я могу получить доступ к этой переменной в моем представлении.

class AccessTokenMixin:

    def dispatch(self, request, *args, **kwargs):
        try:
            accesstoken=AccessToken.objects.get(
                        token=self.request.META.get('HTTP_AUTHORIZATION').replace('Bearer ', '')
                    )

            if not accesstoken.application.company.company_tab_opts:
                return Response (
                    {
                        "status" : False,
                        "error" : "Tab Opts Error",
                        "error_message":"You are not allowed to access it.",
                    }
                )

            return super().dispatch(request, *args, **kwargs)

        except ObjectDoesNotExist:
            return Response (
                {
                    "status" : False,
                    "error" : "Wrong Access Token",
                    "error_message":"You have provided wrong access token.",
                }
            )

class TimesheetListApiV2(AccessTokenMixin, APIView):

    def get(self, request):

        qs = User.objects.exclude(
                        Q(userprofile__user_is_deleted = True) |
                        Q(userprofile__user_company__company_is_deleted=True) 
                    ).filter(
                        Q(userprofile__user_company =accesstoken.application.company) 
                    )
        serializer = TimesheetListSerializer(qs, many=True)

        return Response (
                {
                    "status" : True,
                    "message":"Timesheet Retrieved Successfully.",
                    "result_count": qs.count(),
                    "api_name" : "TimesheetListApiV2",
                    "result": serializer.data,
                }
            )

1 Ответ

0 голосов
/ 26 марта 2019

accesstoken переменная определяется локально в методе AccessTokenMixin.dispatch, поэтому она не определяется вне этого метода.

Итак, ваш TimesheetListApiV2.get метод должен поднять:

NameError: name 'accesstoken' is not defined

Чтобы это исправить, просто замените accesstoken на self.accesstoken, чтобы сделать эту переменную атрибутом.

...