Обработка почтовых запросов в Django Rest framework
Я использую Django Rest Framework, в настоящее время для извлечения некоторых данных из бэкэнда, который мы используем для запроса Get, но из-за увеличения лимита URL мы планируем реализовать запрос Post. Для этого, во-первых, должен быть доступен бэкэнд Django Rest API для обслуживания почтового запроса.
Я новичок в Django, и я не нахожу метод post или get в коде, все, что я могу сказать, это то, что мы используем viewsets, я пытался использовать "@detail_route(method =['post'])", но это не так не работает, что я здесь делаю не так?
class XViewSet(viewsets.ViewSet):
renderer_classes = ''
def retrieve(self, request, pk=None):
try:
pk = int(pk)
except ValueError:
raise InvalidParameterError(parameter_name='id', invalid_value=pk)
queryset = models.X.objects.all()
x = get_object_or_404(queryset, pk=pk)
pipelines = request.query_params.getlist('pipeline[]')
callsets =
callset_ids =
serializer = serializers.XSerializer(x, context={'request': request})
requested_samples = [z[1:] for z in request.query_params.getlist('s')]
filtered_calls = []
serialized_data = serializer.data
unfiltered_calls = serialized_data.get('calls')
if unfiltered_calls:
for serialized_calls in unfiltered_calls:
if serialized_calls['callset'] in callset_ids:
unfiltered_calls = serialized_calls['data']
for call in unfiltered_calls:
if call['y'] in requested_y:
filtered_calls.append(call)
break
serialized_data['calls'] = filtered_calls
return Response(serialized_data, status=status.HTTP_200_OK)
def list(self, request):
qp = self.request.query_params
validated_qp =
# generate the query
query_object =
query =
# execute the query
cursor = connections['default'].cursor()
cursor.execute(query)
qs = utils.dictfetchall(cursor)
# sanitize query results
if 't' in validated_qp:
return_data =
else:
for x in qs:
if 'calls' in x:
x['calls'] =
else:
x['calls'] = {}
return_data =
resp = Response(return_data, status=status.HTTP_200_OK)
if validated_qp.get(''):
resp['content-disposition'] =
return resp
1 ответ
Вы можете использовать представления на основе классов для обработки требований,
from rest_framework.views import APIView
class MyAPI(APIView):
def get(selfself, request):
# do stuff with get
return Response(data="return msg or data")
def post(self, request):
post_data = request.data
# do something with `post_data`
return Response(data="return msg or data")
ОБНОВЛЕНИЕ: Использование ViewSet ViewSet
класс предоставит нам create()
метод для создания новых экземпляров модели. Таким образом, мы можем переопределить это для обработки данных постов, поступающих в представление. Просто добавьте create()
под вашим видом класса, как показано ниже
class XViewSet(viewsets.ViewSet):
renderer_classes = ''
def create(self, request): # Here is the new update comes <<<<
post_data = request.data
# do something with post data
return Response(data="return data")
def retrieve(self, request, pk=None):
# your code
return Response(serialized_data, status=status.HTTP_200_OK)
def list(self, request):
# your code
return resp