Скажем, кто-то хочет GET
сущность под названием Volume
, которая является моделью в django. Я выставил конечную точку:
urlpatterns = [ ...
path('vol', views.volume_view, name='volume query'),
path('vol/<str:volume>', views.volume_view, name='volume specific query'),
... ]
и представление volume_view
имеет такую подпись (внутри GenericViewSet
):
def volume_view(self, request, volume="", format=None):
...
Все хорошо, когда пользователь делает запрос вроде:
requests.get("http:/.../my_app/vol")
или, если пользователь делает запрос, например:
requests.get("http:/.../my_app/vol/some_prefix_here")
, который возвращает пользователю все томов, которые я хранил в данный момент, и подмножество соответственно. Тем не менее, я хотел учесть некоторые умные, необязательные опции, такие как:
page
: вы хотите разбить ответы на страницы?
from
и to
: временные метки для запроса диапазона.
prefix
: поиск любого тома, соответствующего этому префиксу.
Итак, я подумал, поместите их в словарь заголовков request.GET
. Однажды я вставил, например:
requests.get("http:/.../my_app/vol", params={"page":False})
Урлпаттерны не смогли его найти! Это имеет смысл, поскольку в GET параметры добавляются к вашему URL в виде строки запроса:
Когда я запускаю python manage.py runserver
на этом, я получаю это без строки запроса:
[02/May/2018 22:23:13] "GET /my_app/vol HTTP/1.1" 200 123
И это, когда я запускаю его с помощью строки запроса:
Not Found: /my_app/vol
[02/May/2018 22:42:43] "GET /my_app/vol?page=False HTTP/1.1" 404 26
И поэтому я спрашиваю, как правильно обращаться с этой ситуацией? Любые замечания будут оценены. Спасибо.
EDIT:
Selcuk заверил меня, что я написал что-то не так, поэтому я покопался в оболочке manage.py и выполнил несколько запросов вручную по /abcd
URL-адресу и посмотрел, что произошло:
>>> requests.get('http://lx-chmmutil02:8000/.../abcd/')
<Response [200]>
>>> requests.get('http://lx-chmmutil02:8000/.../abcd/', params={"foo":"bar"})
<Response [200]>
>>> requests.get('http://lx-chmmutil02:8000/.../abcd/', params={"page":"False"})
<Response [404]>
>>> requests.get('http://lx-chmmutil02:8000/.../abcd/', params={"boo":"True"})
<Response [200]>
>>> requests.get('http://lx-chmmutil02:8000/../abcd/', params={"boo":"False"})
<Response [200]>
Любые запросы к / abcd / с параметрами, содержащими слово page, немедленно умирают. Где-то в промежуточном программном обеспечении или в самом django оно перехватывает это ключевое слово и взрывается.
Что-то происходит с ключевым словом page
или я схожу с ума?
Если я изменю свое ключевое слово, чтобы оно не включало "страницу", оно будет работать.
Некоторые вещи, которые я использую:
- DRF
ModelViewSet
для вида и volume_view = SomeViewSet.as_view({'get':'list'})
.
- DRF
Serializer
класс.
- DRF
LimitOffsetPagination
класс.