Преобразование представления на основе классов в «нормальное» представление - PullRequest
0 голосов
/ 31 октября 2018

Я написал следующее представление фреймворка django:

# urls.py
url(r'user/company', views.UserViewSet.as_view({"get": "companyInfo"}), name="company_info"),

# views.py
class UserViewSet(viewsets.ModelViewSet):
    serializer_class = UserSerializer
    queryset = User.objects.all()
    permission_classes = (permissions.IsAuthenticated,)

    @action(methods=["get"], detail=True)
    def companyInfo(self, request):
        user = request.user
        company = user.get_company()
        detail = {}
        detail['company'] = company.name
        detail['num_users'] = company.num_licenses if company else None        
        return Response(detail) 

Как бы я написал этот точно такой же вид, как "обычный" вид django с каркасом отдыха django. Например, что-то вроде этого:

# urls.py
path('user/company/', views.company_info, name='company_info'),

# views.py
@require_GET
def company_info(request):
    user = request.user
    company = user.get_company()
    detail = {}
    detail['company'] = company.name
    detail['num_users'] = company.num_licenses if company else None        
    return Response(detail) 

Полагаю, что вышеизложенное - начало, но я думаю, что мне все еще нужно правильно пройти аутентификацию (используя jwt), что UserViewSet автоматически делает с permission_classes = (permissions.IsAuthenticated,).

1 Ответ

0 голосов
/ 31 октября 2018

Вы довольно близко. Вы хотели бы добавить два декоратора, чтобы сделать это представление API с аутентификацией таким же, как в ClassView:

# path('user/company/', views.company_info, name='company_info'),

@api_view(['GET'])
@permission_classes((permissions.IsAuthenticated,))
def company_info(request):
    user = request.user
    company = user.get_company()

    detail = {}
    detail['company'] = company.name
    detail['num_users'] = company.num_licenses if company else None
    detail['company_admin'] = company.admin_user.name if company else None

    return Response(detail)         
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...