Django столкновения URL - PullRequest
       35

Django столкновения URL

0 голосов
/ 29 марта 2020

Использование Django == 2.2.11, djangorestframework == 3.8.1

Спасибо за чтение!

У используемых мной URL-адресов есть коллизия:

urlpatterns = [
    . . . 
    url(
        r'^some-path$',
        views.MyViewSet.as_view({'get': 'list'})
    ),
    url(
        r'^some-path$',
        views.MyViewSet.as_view({'post': 'create'}),
    ),
    ...
]

Я использую почтальон для проверки каждого пути, и кажется, что есть конфликт между этими двумя URL-адресами. Использование этого URL с GET будет работать:

http://my_domain.com:8000/some-path

Но POST с таким же URL-адресом (и с допустимой полезной нагрузкой) выдаст ошибку:

WARNING 2020-03-28 19:13:57,288 "POST /some-path HTTP/1.1" 405 41

И ответ:

{"detail": "Method \"POST\" not allowed."}

Я переставляю URL по порядку, тогда сработает POST, и GET выдаст похожую ошибку.

Я посмотрел этот пост: Метод POST 405 не разрешен

Я бы с радостью добавил код представления - но я почти уверен, что проблема связана с URL-адресами, так как каждый из них работает при смене порядка. Добавим его по запросу.

Спасибо!

РЕДАКТИРОВАТЬ: я перепутал URL-адреса - добавил retrieve вместо list извините!

1 Ответ

1 голос
/ 29 марта 2020

Если вы указываете на ту же конечную точку, ie /some-path, вы должны добавить свои дополнительные действия как,

urlpatterns = [
    url(r'^some-path$', MusicianViewset.as_view(<b>{'post': 'create', 'get': 'list'}</b>)),
]
...