Django Rest Framework url with additional parameters
Я обрабатываю методы POST
, GET
и DELITE
с помощью ниже приведенных функций. Но я полагаю, что тоже самое можно сделать гораздо проще с использованием API и Django Rest Framework. Но как мне добавить в API дополнительные, необходимые параметры (имею в виду /(?P<Id_Incidents>\d+)/
):
router.register(r'victims', AkpVictimsViewSet, basename='api_victims')
Решение без Django Rest Framework:
urlpatterns = [
re_path(r'^incident/(?P<Id_Incidents>\d+)/load_table_victim/$',
views.load_table_victim,
name='load_table_victim'),
path(
'delete_victim/<int:Id_Victim>',
views.delete_victim,
name='delete_victim'),
re_path(r'^incident/(?P<Id_Incidents>\d+)/add_victim/$',
views.add_victim,
name='add_victim')
]
def load_table_victim(request, Id_Incidents=None):
if request.method == "GET":
if request.user:
try:
incidents = AkpIncidents.objects.get(Id_Incidents=Id_Incidents,)
except AkpIncidents.objects.DoesNotExist:
incidents = None
serializer = IncidentsVictimSerializer(incidents, many=False)
return JsonResponse(serializer.data, safe=False)
else:
return HttpResponse(status=403)
else:
return HttpResponse(status=405)
def delete_victim(request, Id_Victim):
if request.method == "DELETE":
if request.user:
victim_to_delete = AkpVictim.objects.filter(Id_Victim=Id_Victim)
victim_to_delete.delete()
return JsonResponse(data={'status': 1, 'message': 'success'}, safe=False, status=200)
else:
return HttpResponse(status=403)
else:
return HttpResponse(status=405)
def add_victim(request, Id_Incidents=None):
if request.method == "POST":
if request.user:
form = AkpVictimForm(request.POST)
if form.is_valid():
victim_created = form.save(commit=False)
victim_created.Id_Incidents = get_object_or_404(AkpIncidents, Id_Incidents=Id_Incidents)
victim_created.save()
return JsonResponse(data={'status': 1, 'message': 'success'}, safe=False, status=201)
else:
return HttpResponse(status=400)
else:
return HttpResponse(status=403)
else:
return HttpResponse(status=405)