我是 Django 的新手,正在做一个项目。在我的项目中,我需要从多个地方调用具有不同"permission_classes"的相同 API



我是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)

现在,我需要在名为"Form"的不同应用程序中调用相同的API在我的项目与不同的权限类。我怎样才能做到呢?

这就是我们如何在另一个视图中调用视图。

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"然后提供了不同的permission和in get方法,直接调用RequisitionFormAV&quot的get函数。并将对象转换为字典,并返回json格式的响应。