Я новичок в Django и работаю над проектом. В моем проекте мне нужно вызывать один и тот же API из нескольких мест с разными "permission_classes".

Я новичок в Django и работаю над проектом для банка крови. В моем проекте я создал API и предоставил пользовательский класс разрешения. Однако мне нужно вызвать тот же API в моем проекте, но в другом месте (в другом приложении). Нужно ли мне создавать еще один API для этого или я могу вызывать тот же самый с другим классом разрешения.

Итак, API я создал в приложении под названием "Form_Hospital > views.py" и вот код:-

class RequisitionFormAV(APIView):
    '''
    to post a "Requisition Form" and get list.
    '''
    permission_classes = [IsAuthenticatedActiveHospitalStaff]
    # permission_classes = [IsAdminUser]
    
    def get(self, request):

        search = request.query_params.get('search')
        page = request.query_params.get('page')
        qty = request.query_params.get('qty')
        
        snippet= RequisitionForm.objects.all()
                
        if search:
            snippet = snippet.filter(
                Q(requisition_no__icontains=search) |
                Q(requested_name__icontains=search) |
                Q(organization_name__icontains=search) |
                Q(contact_no__exact=search)
            )
        output = RequisitionFormSerializer(snippet, many=True).data
        if page and qty:
            output = paginations.page(output, qty, page)
        return Response({'data': output}, status=status.HTTP_200_OK)
    
    def post(self, request):
        
        data = request.data
        
        # getting the organization name of logged in user
        data['organization_name'] = request.user.organization.value
        
        # getting the last DonorRegistrationForm object.
        try:
            snippet = RequisitionForm.objects.all().last().requisition_no
            
            _str = snippet[5:]
            _num = int(_str) + 1
            _len = len(str(_num))
            
            if _len == 1:
                _str = "000" + str(_num)
            if _len == 2:
                _str = "00" + str(_num)
            if _len == 3:
                _str = "0" + str(_num)
            if _len > 3:
                _str = str(_num)
                
            data['requisition_no'] = "RE" + data['organization_name'] + _str
            
        except:
            data['requisition_no'] = "RE" + data['organization_name'] + "0001"
            
        data['created_by'] = request.user.id
        serializer = RequisitionFormSerializer(data=data)
        if not serializer.is_valid():
            return Response({'err_msg': serializer.errors}, status=status.HTTP_400_BAD_REQUEST)
        serializer.save()
        return Response({'data': serializer.data}, status=status.HTTP_201_CREATED)

Теперь мне нужно вызвать этот же API в другом приложении под названием "Form" в моем проекте с другим классом разрешения. как я могу этого добиться?

Вот как мы можем вызвать представление внутри другого представления.

class BloodBankRequisitionFormAV(APIView):
    '''
    to get the lsit of requisition forms.
    '''
    permission_classes = [IsAdminUser]
    
    def get(self, request):
        view = RequisitionFormAV.get(self, request).__dict__
        return Response(view)

Здесь я должен получить доступ к "RequisitionFormAV" в "BloodBankRequisitionFormAV".

Сначала я создал "BloodBankRequisitionFormAV", затем предоставил другое разрешение и в методе get напрямую вызвал функцию get "RequisitionFormAV" и преобразовал объект в словарь и вернул ответ в формате json.

Вернуться на верх