Django (v2 +) и Django REST Framework: что делать с «путями» мешает? - PullRequest
0 голосов
/ 30 сентября 2018

Я новичок в Django REST Framework ... но выясняю это с помощью учебных пособий, быстрого старта, интернета и трюков.Однако я не нашел четкого решения следующей проблемы.

Предположим, что кто-то хочет написать API, для которого требуется целое число.

Используя Django path в шаблонах URL, можно попробовать:

urlpatterns = [
    ...
    path('my_api/<int:integer_argument>', views.my_api, name='my_api'),
    ...
]

и, по их мнению,

@api_view(['GET'])
def my_api(request, integer_argument):
     # do stuff
     return JsonResponse({'int': integer_argument})

Примечание: здесь я использую JsonResponse только для того, чтобы сохранитьэтот простой, но наиболее вероятный, что / те аргументы (ы) входят в класс / модель и в сериализатор, который будет возвращен Response(serializer.data).

Так что теперь, если они должны были протестировать приложение, которое вызывает этот API (в режиме разработки) http://localhost:8000/my_api/1 они должны получить {'int':1}.

Однако, если бы они вызвали http://localhost:8000/my_api/e, они получают либо страницу отладки, либо Bad Request (400) как html .

Предположим, что у человека, создавшего API, была правильная обработка ошибок для проверки аргументов (в этом случае integer_argument является целым числом).

Теперь path мешает, тогда как для сайта django это может быть желаемым результатом.

Что такое среда RESTful и django REST для разрешения этой ситуации?

Преобразование path (например, <int:arg_name>) делает URL-адрес читаемым и, таким образом, является хорошей функцией дляиметь.

Должен ли я просто перемещать типы для ввода аннотаций в представлении на основе функций?и использовать общие слагы?

Примечание: в этом случае я хочу, чтобы каждый запрос к my_api/<something> возвращал единый ответ (ошибка или нет).

1 Ответ

0 голосов
/ 30 сентября 2018

Вашему вопросу не хватает ясности.Вы утверждаете:

Предположим, что у человека, создавшего API, была правильная обработка ошибок для проверки аргументов (в этом случае integer_argument является целым числом).

Да, это будет Django, обрабатывающий вещи .... Вот почему вы получаете страницу отладки \ Bad Request, потому что она не совпадает.

В вашем API вы определяете конечные точки, которые соответствуют этому формату -точно.Если URI не совпадает, то это ожидаемое поведение, вам не следует делать здесь никаких волшебств, потому что это просто не имеет смысла.

Если вы хотите использовать аннотации типов, конечно - mypy полезен и другим разработчикамможет также оказаться полезным.

Теперь для следующего бита:

Примечание: в этом случае я хочу, чтобы каждый запрос к my_api / возвращал одинаковый ответ (ошибка или нет).

Итак .... добавьте конечную точку, которая действует как перехват всех, чтобы возвращать этот унифицированный ответ, когда другим путям \ путям регулярного выражения не удается найти совпадение.Я думаю, вы слишком усложняете это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...