Определите POST в остальной части coreapi/django
Есть ли способ определить объект для функции post в схеме django rest framework?
У меня есть вид отдыха API:
class DocumentView(viewsets.ModelViewSet):
...
queryset = Document.objects.all().order_by('pk')
serializer_class = serializers.DocumentSerializer
pagination_class = LargeResultPagination
permission_classes = (IsAuthenticated,)
authentication_class = (
Token,
)
def perform_create(self, serializer):
serializer.save(user=self.request.user)
Данные, которые должны быть размещены, имеют формат:
{
"items": ["a", "b", "c"],
"name": "test"
}
Как я могу описать это в схеме с помощью coreapi?
manual_fields=[
coreapi.Field(
"data",
required=True,
location="body",
description='{"items":[], "name":str}',
schema=coreschema.Object()
),
])
По крайней мере, так будет в описании. Это, конечно, не очень удобно, особенно если вам нужно больше полей в JSON, который будет опубликован, так как описание в одной строке только в swagger.
Наиболее идеальной была бы ситуация, если бы я мог получить поля 'items' и 'name' в виде отдельных полей на странице сваггера.
Я гуглил, но не могу найти ответ на этот вопрос. Все примеры, которые я видел, предназначены для получения параметров. Так что же лучше здесь делать?
1 ответ
Должно работать, если вы оберните его в AutoSchema
schema = AutoSchema(manual_fields=[
coreapi.Field(
"data",
required=True,
location="body",
description='{"items":[], "name":str}',
schema=coreschema.Object()
),
])
От этого вопроса прошло много времени, но если кому-то нужно, это ваше решение, вам нужно установить местоположение в 'form', чтобы ваша схема была такой:
manual_fields=[
coreapi.Field(
"data",
required=True,
location="form",
description='{"items":[], "name":str}',
schema=coreschema.Object()
),
])
Для получения дополнительных инструкций вы можете увидеть схемы - Django Rest Framework
Здесь я извлекаю нужный вам раздел:
РАСПОЛОЖЕНИЕ
Определяет, как информация кодируется в запросе. Должна быть одна из следующих строк:
"путь"
Включен в шаблонный URI. Например, значение URL-адреса / products / {product_code} / можно использовать вместе с полем "путь" для обработки входных данных API в пути URL-адреса, например / products / slim-fit-jeans /.
Эти поля обычно соответствуют именованным аргументам в URL-адресе проекта conf.
"запрос"
Включен как параметр запроса URL. Например? Search=sale. Обычно для запросов GET.
Эти поля обычно соответствуют элементам управления разбиением на страницы и фильтрацией в представлении.
"форма"
Включено в тело запроса как отдельный элемент объекта JSON или HTML-формы. Например {"цвет": "синий", ...}. Обычно для запросов POST, PUT и PATCH. В одну ссылку можно включить несколько полей "формы".
Эти поля обычно соответствуют полям сериализатора в представлении.
"тело"
Включено как полное тело запроса. Обычно для запросов POST, PUT и PATCH. В ссылке может существовать не более одного поля "body". Не могут использоваться вместе с полями "формы".
Эти поля обычно соответствуют представлениям, которые используют ListSerializer для проверки ввода запроса, или представлениям загрузки файлов.