Я новичок в 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.